Arrays 在Matlab中使用2D索引数组从3D数组中获取值列表

Arrays 在Matlab中使用2D索引数组从3D数组中获取值列表,arrays,matlab,Arrays,Matlab,我有一个3D阵列,看起来像这样: edges = round(rand(20,20,20))); 然后,我创建一个随机索引列表,如下所示: indices = floor(rand(10000,3)*(19))+1; 因此,如果我尝试使用索引2D数组的第一行来访问边数组中的元素,我会: >>> edges(indices(1,1),indices(1,2),indices(1,3)) >>> ans = 1 我想,如果我想得到所有索引位置的边的值,我可以

我有一个3D阵列,看起来像这样:

edges = round(rand(20,20,20)));
然后,我创建一个随机索引列表,如下所示:

indices = floor(rand(10000,3)*(19))+1;
因此,如果我尝试使用索引2D数组的第一行来访问
数组中的元素,我会:

>>> edges(indices(1,1),indices(1,2),indices(1,3))
>>> ans = 1
我想,如果我想得到所有索引位置的
边的值,我可以这样做

>>> edges(indices)

但是它返回一个
10000
by
3
矩阵。我希望
10000
by
1
矩阵在
索引的每行指定的位置处具有
值。这里发生了什么,有没有一种方法可以在不使用任何
for
循环的情况下获得我想要的值?

是的。在
边中使用单个索引,而不是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
会比2s、3s、4s、5s少1s和6s

edges = randi(2,20,20,20)-1;
indices = randi(20^3,10000,1);
edges(indices)

阅读
sub2ind
ind2sub