假设我有一个矩阵A = rand(2,14,24)和一个向量x = 10 * ones(1,14)矩阵的一个向量的元素相乘
我想元素明智地乘以A和x,使得对于所有j = 1,2,...,B(i,j,k)= A(i,j,k)* x(j) 我希望能够在不运行循环的情况下执行此操作。什么是在matlab中最有效的方法?
假设我有一个矩阵A = rand(2,14,24)和一个向量x = 10 * ones(1,14)矩阵的一个向量的元素相乘
我想元素明智地乘以A和x,使得对于所有j = 1,2,...,B(i,j,k)= A(i,j,k)* x(j) 我希望能够在不运行循环的情况下执行此操作。什么是在matlab中最有效的方法?
您首先使用repmat
来平铺x
正确的次数,然后做元素方式的乘法。
repX = repmat(x, [size(A, 1), 1, size(A, 3)]);
B = A.*repX;
如果你按10元明智的向量乘以A
,是不是由标反而更容易简单的乘法?
B = A * 10;
对于一般情况,此处不需要repmat
逻辑。 bsxfun
可以做到这一点(而且速度更快)。 :
B = bsxfun(@times, A, x);
我需要一个通用的解决方案。我在MathWorks上阅读了bsxfun页面,但我无法理解如何指定正确的索引相乘? – skr 2013-05-06 09:15:57
@skr这是一个通用的解决方案,您无需指定任何内容。 'bsxfun'自动复制较小矩阵(在本例中为'x')沿着较大矩阵的所有非singelton维(在我们的例子中为'A')。所以如果'x'是一个行向量,它将自动沿着第一维和第三维被复制。 – 2013-05-06 09:21:26