与块矩阵的乘法传染媒介在matlab

时间:2013-07-09 15:11:58

标签: matlab matrix-multiplication

我有一个尺寸为15NxM的矩阵A.也就是说,它由N个不同的15xM矩阵组成。

我还有一个尺寸为1x15的矢量B.

我真正想要做的是在A中的每个N块上执行简单的矩阵乘法B * A(块),这样我最终得到一个NxM矩阵。

我需要在不进行任何循环的情况下执行此操作,因为我这样做的主要原因是为了获得一些速度。

感谢。

2 个答案:

答案 0 :(得分:2)

你可以尝试

result = reshape( B * reshape(A, 15, []), N, M);

这避免了创建B的中间“repmat”副本;但是reshape可能很慢。

答案 1 :(得分:0)

您可以将A矩阵转换为单元格数组。首先,您将要创建矩阵维度的N元素数组(15),以指定单元格的大小:

dimArray = repmat(15, 1, N);    % 1xN array of the number 15

接下来,您将在矩阵mat2cell上调用A将其转换为单元格数组,其中每个单元格是A的15xM子矩阵:

newA = mat2cell(A, dimArray);

最后,在单元格数组上调用cellfun进行乘法运算:

result = cellfun(@(x) B*x, newA, 'UniformOutput', false);

哪个应该为您的result矩阵中的每个块提供包含B*A(block)结果的单元格数组A。你可以把这一切都放在一行,或者最多两行:

result = cellfun(@(x) B*x, mat2cell(A, repmat(15, 1, N)), 'UniformOutput', false);

不是最清楚的代码。这似乎是一种有点圆润的方式。如果有人让它与repmat或类似的一起工作,那么这可能是更好的方法。