2

我有一个尺寸为 15NxM 的矩阵 A。也就是说,它由 N 个不同的 15xM 矩阵组成,这些矩阵相互堆叠。

我还有一个尺寸为 1x15 的向量 B。

我真正想做的是对 A 中的 N 个块中的每一个执行简单的矩阵乘法 B*A(Block),这样我就得到了一个 NxM 矩阵。

我需要这样做而不做任何循环,因为我这样做的主要原因是为了获得一些速度。

谢谢。

4

2 回答 2

2

你可以试试

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

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

于 2013-07-09T15:30:12.423 回答
0

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

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或类似,那么这可能是更好的方法。

于 2013-07-09T15:22:53.567 回答