假設我有一個矩陣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