這是一個簡單的外部產品。 kron是不需要的(雖然它會起作用)。bsxfun是瘋狂的矯枉過正,雖然會產生你所要求的。 repmat是不合適的,因爲雖然它可以幫助你做你想做的事,但它會在內存中複製數組,使用比所需更多的資源。 (避免使用低效的編程風格,當有好的編程風格立即在您的處置。)
所有你需要使用的是簡單的*運算符。
A是一個行向量。 B列向量。
C = B*A
將產生結果C(i,j)= B(i)* A(j),這正是你正在尋找的。請注意,這是有效的,因爲B是3x1而A是1x4,所以B和A的「內部」尺寸符合。
在MATLAB中,如果您不確定是否有用,請嘗試!
A = [1 2 3 4];
B = [1;2;3];
C = B*A
ans =
1 2 3 4
2 4 6 8
3 6 9 12
請參閱KRON確實工作,但我敢打賭使用KRON這裏可能是低效率比單純外積的乘法。
C = kron(B,A)
C =
1 2 3 4
2 4 6 8
3 6 9 12
同時,bsxfun將在這裏工作過,但因爲我們使用的是通用的工具做一些基本的操作者會做,我打賭這是略少效率。
C = bsxfun(@times,B,A)
C =
1 2 3 4
2 4 6 8
3 6 9 12
最糟糕的選擇是repmat。再一次,因爲它人爲地將載體複製到記憶體FIRST中,所以在大載體的情況下它必須出去並抓住大塊的記憶。
C = repmat(B,1,4).*repmat(A,3,1)
C =
1 2 3 4
2 4 6 8
3 6 9 12
我想完整性,你也可以使用meshgrid或ndgrid。看到它正在做repmat做的,但是在這裏它明確地創建了新的矩陣。再次,當有好的工具來完成你想要的工作時,這是一種糟糕的編程風格。
[BB,AA] = ndgrid(B,A)
BB =
1 1 1 1
2 2 2 2
3 3 3 3
AA =
1 2 3 4
1 2 3 4
1 2 3 4
C = BB.*AA
C =
1 2 3 4
2 4 6 8
3 6 9 12
你需要了解的是究竟爲什麼這些工具可能已經用於作業,以及爲什麼它們是不同的。
你試過從右乘以A嗎? B()。A() –