2013-08-23 42 views
2

我不知道如果我正確地命名這個問題:通過MATLAB的多矢量化?

我有什麼:

X = [0 1 2 3 4 5 6 7 8 9; 6 2 5 5 4 5 6 3 7 6]; 
Z = [0 0 0 1 0 0 0 0 0 0; 0 0 0 0 0 1 0 0 0 0; 0 0 0 0 0 0 0 0 0 1; 0 0 0 0 0 0 0 0 1 0]; 

現在我的問題是:

我們是矩陣X的第二個整排的比較成矩陣Z (都具有相同數量的coulmns,但在行數可能有所不同) 我想才達到低於結果:

ans = [5 5 6 7] 

怎麼一回事,因爲:

X(2,Z(1,:)) = 5 
X(2,Z(2,:)) = 5 
X(2,Z(3,:)) = 6 
X(2,Z(4,:)) = 7 

所以我的問題是我想做到這一點wihout任何循環,細胞或annonymous功能。只需通過向量化一切縮短代碼。我可以在一條線上做嗎?

這上面如下不一樣,如果我做的工作:

X(2,Z(:,:)) 

回答

6

這其實很簡單 - 你可以使用的X第二排和Z轉置之間的矩陣乘法:

> X(2,:)*Z' 
ans = 

    5 5 6 7 

> 
+1

。謝謝。 – user2710469

2

通過@保羅R本解決方案是非常好的,這裏是2行的另一種方法:

[myRow, myCol] = find(Z'); 
X(2,myRow) 
+1

用八度給我'5 5 7 6' - 它在MATLAB中工作嗎? –

+0

@PaulR沒有注意到順序的改變,現在應該沒問題。 –

+0

是的,這似乎現在工作 - 它現在在八度給我'5 5 6 7'。 –