用bsxfun将一个矩阵的所有列乘以另一个矩阵

时间:2013-09-23 12:48:41

标签: matlab bsxfun

我有两个大小为A的{​​{1}}和B矩阵。将4x4的第一列与A的所有其他列相乘:

B

但我想要做的是为bsxfun(@times, A(:,1),B) 的每一列重复此操作,A的所有列乘以A的所有列。如何使用B(无循环或bsxfun)?

执行此操作

2 个答案:

答案 0 :(得分:4)

是的,通过permuting其中一个矩阵的维度使其成为4x1x4阵列:

permute(bsxfun(@times, A, permute(B, [1 3 2])), [1 3 2])

答案 1 :(得分:0)

可替换地:

>> 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。你问的是Element wise乘法。