2015-11-12 56 views
-2

我有一個矩陣z(比如200x5),其中每行只有一個元素是非零的。如果不使用for循環,找到該索引的最有效方法是什麼?查找非零行索引

例如:

z=[1 0 0;0 0 1]; 
a=findRow(z) 

其中應該顯示:

[1 3] 
+0

你有什麼試過?我們應該做你的工作/作業嗎?之後我們會獲得您的付款/文憑嗎? *聳聳肩* – usr1234567

+0

因爲我找到了答案,我應該刪除它嗎? 「我們不建議刪除帶有答案的問題,因爲這樣做會剝奪未來讀者的這種知識。」我也覺得有趣的是,與增加投票相比,人們很快就會倒下。 –

+0

@Sachin_ruk你找到了嗎?發佈一個鏈接,我們將其標記爲重複 – Dan

回答

3

原來, '查找' 是解決方案,不同之處在於我不得不轉Z:

[rowidx,~]=find(z'); 

編輯:必須首先轉置它,因爲matlab首先找到列。因此,如果不轉置,則行索引的順序關閉。

+0

爲什麼不直接使用第二個輸出而不是移調? – Dan

+2

我試過用更大的矩陣。 rowidx出現的順序是不同的(matlab首先查找事物列)。 –

+3

好點!你應該把它添加到你的答案中(用一個小例子) – Dan

2

如果你有大多0元素的矩陣,你可以考慮使用sparse矩陣被設計爲空間高效在這種情況下:

z = sparse([1,0,0;0,0,1]); 

您仍然可以只使用find來得到你的答案

[~,idx] = find(z);