[英]Finding indices of non-zero elements in Matlab matrix
我有一個矩陣像
A = [ 0 1 1;0 0 0;1 1 0]
為此,我希望以以下方式知道1
的索引:
對於第1行,我需要等於1
的列的索引值。 第2行和第3行類似。
稍后,我想對列重復此練習,就像對列1一樣,我需要行索引的值等於1
。 第二列和第三列類似
ans
應該是這樣的:
同理:
請幫忙。
使用find
和accumarray
:
[ii jj] = find(A); %// find row and col indices (ii and jj respectively)
rows = accumarray(ii,jj,[], @(v) {sort(v).'}); %'// group jj as per ii, and sort
cols = accumarray(jj,ii,[], @(v) {sort(v).'}); %'// group ii as per jj, and sort
以您的示例為例
>> rows{:}
ans =
2 3
ans =
[]
ans =
1 2
>> cols{:}
ans =
3
ans =
1 3
ans =
1
如果您確實需要用0
填充空白結果:
rows = accumarray(ii,jj,[], @(v) {sort(v).'}, {0}); %'// 5th input is fill value
cols = accumarray(jj,ii,[], @(v) {sort(v).'}, {0});
導致
>> rows{:}
ans =
2 3
ans =
0
ans =
1 2
>> cols{:}
ans =
3
ans =
1 3
ans =
1
最簡單的方法可能是使用循環和find
函數以及單元格數組來存儲您的答案。 例如,要獲取每行中的列表:
for i=1:size(A,1)
rowsOne{i} = find(A(i,:)==1);
end
然后, rowsOne{i}
包含一個向量,該向量列出數組A的第i行中等於1的元素的索引。 如果連續沒有元素等於1,它將保存一個空數組。
列的解決方案大致相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.