我有一个nX2矩阵A和一个3D矩阵K。我想进行元素逐个乘法,指定A的每个行向量在K的第3维中指定2个索引,并对它们求和。
例如,当n = 2时,
A=[1 2;3 4];%2X2 matrix
K=unifrnd(0.1,0.1,2,2,4);%just random 3D matrix
L=zeros(2,2);%save result to here
for t=1:2
L=L+prod(K(:,:,A(t,:)),3);
end
在这种情况下可以摆脱for循环吗?
这个怎么样?
B = A.'; %'
L = squeeze(sum(prod(...
reshape(permute(K(:,:,B(:)),[3 1 2]),2,[],size(K,1),size(K,2)),...
1),...
2));
尽管您的测试用例太简单了,所以我不能完全确定它是正确的。
这个想法是,我们首先以A
大列的顺序获取所有索引,然后重塑的元素K
,使前两个维的大小为[2, n]
,后两个维为的原始2 K
。然后,我们乘积,然后取必要尺寸的和,最后得到一个矩阵,必须对其进行压缩以获得二维矩阵。
使用更多有用的测试用例:
K = rand(2,3,4);
A = randi(4,4,2);
L = zeros(2,3);%save result to here
for t=1:size(A,1)
L = L+prod(K(:,:,A(t,:)),3);
end
B = A.'; %'
L2 = squeeze(sum(prod(reshape(permute(K(:,:,B(:)),[3 1 2]),2,[],size(K,1),size(K,2)),1),2));
然后
>> isequal(L,L2)
ans =
1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句