【发布时间】:2014-01-08 05:27:15
【问题描述】:
我想要做的是在没有循环的情况下获得像下面的 sn-p 这样的结果。
x = [1 2 3 4];
y = [2 3 4];
z=[7 8];
[x'*y]
for k=1:size(z, 2)
z2(:,:,k)=[x'*y]*z(k);
end
z2
但是,循环可能会减慢 MATLAB。没有他们,我如何处理任务?
【问题讨论】:
我想要做的是在没有循环的情况下获得像下面的 sn-p 这样的结果。
x = [1 2 3 4];
y = [2 3 4];
z=[7 8];
[x'*y]
for k=1:size(z, 2)
z2(:,:,k)=[x'*y]*z(k);
end
z2
但是,循环可能会减慢 MATLAB。没有他们,我如何处理任务?
【问题讨论】:
您可以这样做,因为z 是`向量:
bsxfun(@times, reshape(z, 1, 1, []), [x'*y])
如果z 本身是一个二维矩阵,并且您想在每个级别进行矩阵乘法,那么您需要使用我在评论中发布的链接。但是因为每次乘以一个标量,就可以使用@times。
【讨论】:
看看here。在此基础上,您可以这样做:
x = [1 2 3 4];
y = [2 3 4];
z=[7 8];
% replicate [x'*y] into 3D array.
d = repmat([x'*y], [1, 1, numel(z)])
% multiplay by z vector
z2 = bsxfun(@times, d, reshape(z,[1, 1, numel(z)]))
【讨论】: