Matlab 用bsxfun将一个矩阵的所有列乘以另一个矩阵
我有两个矩阵Matlab 用bsxfun将一个矩阵的所有列乘以另一个矩阵,matlab,bsxfun,Matlab,Bsxfun,我有两个矩阵A和B,大小都是4x4。将A的第一列与B的所有其他列相乘: bsxfun(@times, A(:,1),B) 但是我想做的是对A的每一列重复这个操作,即用A的所有列乘以B的所有列。如何使用bsxfun(无循环或repmat)执行此操作?是,通过其中一个矩阵的尺寸使其成为4x1x4阵列: permute(bsxfun(@times, A, permute(B, [1 3 2])), [1 3 2]) 是的,通过其中一个矩阵的尺寸使其成为4x1x4阵列: permute(bsxfun
A
和B
,大小都是4x4
。将A
的第一列与B
的所有其他列相乘:
bsxfun(@times, A(:,1),B)
但是我想做的是对A
的每一列重复这个操作,即用A
的所有列乘以B
的所有列。如何使用bsxfun
(无循环或repmat
)执行此操作?是,通过其中一个矩阵的尺寸使其成为4x1x4阵列:
permute(bsxfun(@times, A, permute(B, [1 3 2])), [1 3 2])
是的,通过其中一个矩阵的尺寸使其成为4x1x4阵列:
permute(bsxfun(@times, A, permute(B, [1 3 2])), [1 3 2])
或者:
>> n = size(A, 1);
>> res = arrayfun(@(x) A(:, x) * ones(1, n) .* B, 1 : n, 'UniformOutput', false)
res =
[4x4 double] [4x4 double] [4x4 double] [4x4 double]
备注:在Matlab中,“乘法”默认表示矩阵乘法,即简单的res=A'*B
。您所问的是元素乘法。或者:
>> n = size(A, 1);
>> res = arrayfun(@(x) A(:, x) * ones(1, n) .* B, 1 : n, 'UniformOutput', false)
res =
[4x4 double] [4x4 double] [4x4 double] [4x4 double]
备注:在Matlab中,“乘法”默认表示矩阵乘法,即简单的
res=A'*B
。您要求的是元素级乘法。+1,但您的编辑似乎产生了移位的结果。我已经纠正了你的答案+1,但您的编辑似乎产生了变化的结果。我已经纠正了你的答案bsxfun
非常有趣bsxfun
非常有趣!!!