我有一个尺寸为15NxM的矩阵A.也就是说,它由N个不同的15xM矩阵组成。
我还有一个尺寸为1x15的矢量B.
我真正想要做的是在A中的每个N块上执行简单的矩阵乘法B * A(块),这样我最终得到一个NxM矩阵。
我需要在不进行任何循环的情况下执行此操作,因为我这样做的主要原因是为了获得一些速度。
感谢。
答案 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
或类似的一起工作,那么这可能是更好的方法。