[英]How to multiply two vectors with different length
假設我有兩個向量:
A = [1 2 3];
B = [1 2];
我需要一個類似於A*B
乘法的函數來產生以下輸出:
[
1 2 3
2 4 6
]
似乎不允許使用A*B
, A*B'
或A.*B
類A*B
東西,因為元素的數量不相同。
我設法做到這一點的唯一方法(我在MATLAB上很新)是使用ndgrid
來制作兩個具有相同元素數量的矩陣,如下所示:
[B1,A1] = ndgrid(B, A);
B1.*A1
ans =
1 2 3
2 4 6
如果元素數量很大,這會具有良好的性能嗎? 在MATLAB中有更好的方法嗎?
實際上,我正在嘗試使用MATLAB解決以下問題:
t = [1 2 3]
y(t) = sigma(i=1;n=2;expression=pi*t*i)
然而,即使有更好的方法解決實際問題,了解我的第一個問題的答案也會很有趣。
您在談論外在產品 。 如果A和B都是行向量,則可以使用:
A'*B
如果它們都是列向量,則可以使用
A*B'
Matlab中的*
運算符表示矩陣乘法 。 矩陣乘法的最基本規則是,第一個矩陣的列數必須與第二個矩陣的行數匹配。 假設我有兩個矩陣A和B,尺寸分別為MxN和UxV。 然后,我只能在以下條件下執行矩陣乘法:
A = rand(M,N);
B = rand(U,V);
A*B % Only valid if N==U (result is a MxV matrix)
A'*B % Only valid if M==U (result is a NxV matrix)
A*B' % Only valid if N==V (result is a MxU matrix)
A'*B' % Only valid if V==M (result is a UxN matrix)
還有四種可能的情況,但它們只是所示情況的轉置。 現在,由於向量只是一個只有一個非單維度的矩陣,因此適用相同的規則
A = [1 2 3]; % (A is a 1x3 matrix)
B = [1 2]; % (B is a 1x2 matrix)
A*B % Not valid!
A'*B % Valid. (result is a 3x2 matrix)
A*B' % Not valid!
A'*B' % Not valid!
同樣,還有其他四種可能的情況,但是唯一有效的情況是B'*A
,它是A'*B
的轉置,並產生2x3
矩陣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.