Arrays 在matlab中访问三维矩阵中的多个元素
嗨,我想从3d阵列中获取多个点,但我不知道任何不使用循环的有效方法。我尝试过使用sub2ind,但单独处理每个2d矩阵似乎不是很有效 如果您希望数据的所有值都在三维中,您可以使用以下工具轻松访问它:Arrays 在matlab中访问三维矩阵中的多个元素,arrays,matlab,indexing,element,Arrays,Matlab,Indexing,Element,嗨,我想从3d阵列中获取多个点,但我不知道任何不使用循环的有效方法。我尝试过使用sub2ind,但单独处理每个2d矩阵似乎不是很有效 如果您希望数据的所有值都在三维中,您可以使用以下工具轻松访问它: Rows=[4,1,3] Col=[1,2,3] val(行、列、列):) 输出: >val([4,1,3],[1,2,3],:) ans(:,:,1)= 0.7791 0.3342 0.7441 0.1068 0.7150 0.6987 0.4942 0.8909 0.03
Rows=[4,1,3]
Col=[1,2,3]
val(行、列、列):)
输出:
>val([4,1,3],[1,2,3],:)
ans(:,:,1)=
0.7791 0.3342 0.7441
0.1068 0.7150 0.6987
0.4942 0.8909 0.0305
ans(:,:,2)=
0.5767 0.0287 0.7127
0.6177 0.1829 0.4899
0.8055 0.8865 0.9787
ans(:,:,3)=
0.0967 0.1499 0.6490
0.0424 0.8181 0.6596
0.5216 0.7224 0.9730
您可以通过以下方式获得所需的输出:
val(:,:,1) =
0.1068 0.7150 0.6987 0.5000
0.6538 0.9037 0.1978 0.4799
0.4942 0.8909 0.0305 0.9047
0.7791 0.3342 0.7441 0.6099
val(:,:,2) =
0.6177 0.1829 0.4899 0.5005
0.8594 0.2399 0.1679 0.4711
0.8055 0.8865 0.9787 0.0596
0.5767 0.0287 0.7127 0.6820
val(:,:,3) =
0.0424 0.8181 0.6596 0.8003
0.0714 0.8175 0.5186 0.4538
0.5216 0.7224 0.9730 0.4324
0.0967 0.1499 0.6490 0.8253
Row Col
4 1
1 2
3 3
输出:
x1 = [4,1,3];
x2 = [1,2,3];
x = val(x1,x2,:);
for ii = 1:size(val,3)
res(:,:,ii) = diag(x(:,:,ii)).';
end
x1 = [4,1,3];
x2 = [1,2,3];
len = length(x1);
ind = sub2ind(size(val),x1+zeros(len,1),x2+zeros(len,1),[1:size(val,3)].'+zeros(1,len));
res = A(ind)
%if you want to preserve the third dimension add: permute(res,[1,3,2])
%we can do that because an array in matlab has an infinite number of singleton dimension
或者使用sub2ind
和隐式扩展(matlab 2016b及更新版本)
输出:
x1 = [4,1,3];
x2 = [1,2,3];
x = val(x1,x2,:);
for ii = 1:size(val,3)
res(:,:,ii) = diag(x(:,:,ii)).';
end
x1 = [4,1,3];
x2 = [1,2,3];
len = length(x1);
ind = sub2ind(size(val),x1+zeros(len,1),x2+zeros(len,1),[1:size(val,3)].'+zeros(1,len));
res = A(ind)
%if you want to preserve the third dimension add: permute(res,[1,3,2])
%we can do that because an array in matlab has an infinite number of singleton dimension
向我们展示您已经尝试过的…
res=val(行,列:)
index=sub2ind(size(array)、row、col)然后output=array(index)这只给出了第一个2d数组值,但没有给出rest@obchardon我以前也试过,但它似乎不能满足我的需求。我需要输出如下输出(:,:,1)=0.7791,0.7150,0.0305输出(:,:,2)=0.5767,等等。我认为OP想要访问具有成对索引的3D数组。嗨,谢谢你的帮助,但是如果我对非常大的数组使用你的第一种技术,可能需要很长时间?我现在将使用它,完成其余代码,然后在以后对其进行优化。不过还是要谢谢你!