Получите список значений из 3D-массива, используя 2D-индексный массив в Matlab - PullRequest
0 голосов
/ 05 мая 2020

У меня есть трехмерный массив, который выглядит так:

edges = round(rand(20,20,20)));

Затем я создаю случайный список индексов следующим образом:

indices = floor(rand(10000,3)*(19))+1;

Итак, если я попытаюсь использовать первый строка 2D-массива индексов для доступа к элементу в массиве edges, я делаю:

>>> edges(indices(1,1),indices(1,2),indices(1,3))
>>> ans = 1

Я подумал, если я хочу получить значение edges во всех позициях индекса, Я мог бы сделать

>>> edges(indices)

, но это вернет матрицу 10000 на 3. Я бы ожидал матрицу 10000 на 1 со значениями edges в позициях, указанных каждой строкой indices. Что здесь происходит, и есть ли способ получить нужные мне значения без использования каких-либо for циклов?

1 Ответ

1 голос
/ 05 мая 2020

Да. Используйте один индекс в edges вместо 3:

edges = round(rand(20,20,20));
indices = floor(rand(10000,1)*(20^3-1))+1;
edges(indices)

Вы также должны использовать randi() вместо round(rand()), потому что round(5*rand())+1 даст вам меньше 1 и 6, чем 2, 3 , 4с, 5с.

edges = randi(2,20,20,20)-1;
indices = randi(20^3,10000,1);
edges(indices)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...