我目前正在寻找一种有效的方法,切片多维矩阵在MATLAB。Ax一个例子,假设我有一个多维矩阵,例如
A = rand(10,10,10)
我想得到这个矩阵的子集(让我们称之为B
),在每个维度上的某些索引。为此,我可以访问每个维度的索引向量:
ind_1 = [1,4,5]
ind_2 = [1,2]
ind_3 = [1,2]
目前,我这样做的效率相当低,具体如下:
N1 = length(ind_1)
N2 = length(ind_2)
N3 = length(ind_3)
B = NaN(N1,N2,N3)
for i = 1:N1
for j = 1:N2
for k = 1:N3
B(i,j,k) = A(ind_1(i),ind_2(j),ind_3(k))
end
end
end
我怀疑有更聪明的方法可以做到这一点。理想情况下,我正在寻找一种不用于循环的解决方案,并且可以用于任意的N
维矩阵。
发布于 2015-05-07 14:34:45
其实很简单:
B = A(ind_1, ind_2, ind_3);
正如你所看到的,Matlab指数可以是向量,结果是这些向量指数的笛卡儿积。有关Matlab索引的更多信息可以找到这里。
如果编程时维数未知,则可以在单元格数组中定义索引,然后展开为逗号分隔列表。
ind = {[1 4 5], [1 2], [1 2]};
B = A(ind{:});
发布于 2015-05-07 14:38:01
您可以通过简单地指定索引来引用矩阵中的数据,如下例所示:
B = A(start:stop, :, 2);
在本例中:
start:stop
获取两点之间的数据范围。:
获取所有条目2
只获得一个条目在您的例子中,由于您的所有索引都是1D,所以只需使用:
C = A(x_index, y_index, z_index);
https://stackoverflow.com/questions/30104111
复制相似问题