Ber*_* U. 4 arrays matlab multidimensional-array
我目前正在寻找一种在 MATLAB 中对多维矩阵进行切片的有效方法。举个例子,假设我有一个多维矩阵,例如
A = rand(10,10,10)
我想B在每个维度的某些索引处获得这个矩阵的一个子集(我们称之为)。为此,我可以访问每个维度的索引向量:
ind_1 = [1,4,5]
ind_2 = [1,2]
ind_3 = [1,2]
Run Code Online (Sandbox Code Playgroud)
现在,我这样做效率很低,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
我怀疑有一种更聪明的方法可以做到这一点。理想情况下,我正在寻找一种不使用 for 循环并且可以用于任意N维度矩阵的解决方案。
其实很简单:
B = A(ind_1, ind_2, ind_3);
Run Code Online (Sandbox Code Playgroud)
如您所见,Matlab 索引可以是向量,然后结果是这些向量索引的笛卡尔积。可以在此处找到有关 Matlab 索引的更多信息。
如果在编程时维度数未知,您可以在单元格数组中定义索引,然后扩展为逗号分隔列表:
ind = {[1 4 5], [1 2], [1 2]};
B = A(ind{:});
Run Code Online (Sandbox Code Playgroud)