【发布时间】:2015-07-18 04:56:14
【问题描述】:
我目前正在寻找一种在 MATLAB 中对多维矩阵进行切片的有效方法。举个例子,假设我有一个多维矩阵,例如
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
我怀疑有一种更聪明的方法可以做到这一点。理想情况下,我正在寻找一种不使用 for 循环且可用于任意N 维矩阵的解决方案。
【问题讨论】:
-
这里的困难在于维度,特别是如果您在编程时不知道它。我过去所做的是将切片字符串放在一起,然后对其使用 eval 。不好,但如果有人对任意数量的维度有更好的想法。
-
@Trilarion 在这种情况下,您可以使用从元胞数组生成的逗号分隔列表;查看我的更新答案
标签: arrays matlab multidimensional-array