此刻,我的函数完成了我想要的事情(请参见下面的示例输出和输入),看起来像这样。我想通过避免当前使用的两个for
循环来使其更快。
function [rr]=OuterVec(r)
N = size(r,1);
rr = zeros(N,N,3,3);
for i=1:N
for j=1:N
rr(i,j,:,:)=kron(reshape(r(i,j,:),[1,3]),permute(r(i,j,:),[3 2 1]));
end
end
end
I / O示例
c = ones(2,2);
V(1,1,:)=[1 2 3];
u = c.*V;
OuterVec(u)
ans(:,:,1,1)=
1 1 1 1
ans(:,:,2,1)=
2 2 2 2
ans(:,:,3,1)=
3 3 3 3
ans(:,:,1,2)=
2 2 2 2
ans(:,:,2,2)=
4 4 4 4
ans(:,:,3,2)=
6 6 6 6
ans(:,:,1,3)=
3 3 3 3
ans(:,:,2,3)=
6 6 6 6
ans(:,:,3,3)=
9 9 9 9
答案 0 :(得分:1)
您只需要置换尺寸并应用具有单例扩展的逐元素乘积:
rr = bsxfun(@times, r, permute(r, [1 2 4 3]));
或者,从Matlab R2016b开始,
rr = r .* permute(r, [1 2 4 3]);