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
非常有趣!!!