簡體   English   中英

在Matlab矩陣中查找非零元素的索引

[英]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應該是這樣的:

  • 第1行-索引為:2,3
  • 第2行-索引為:0
  • 第3行-索引為:1,2

同理:

  • 對於第1列-索引是:3
  • 對於第2列-索引為:1,3
  • 對於第3列-索引是:1

請幫忙。

使用findaccumarray

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM