簡體   English   中英

Matlab:每行或每列的第一個非零元素

[英]Matlab: First Non-zero element of each row or column

例如,

A = [ -1   0  -2   0   0
   2   8   0   1   0
   0   0   3   0  -2
   0  -3   2   0   0
   1   2   0   0  -4];

如何獲得每行的第一個非零元素的向量?

你可以使用max

>> [sel, c] = max( A ~=0, [], 2 );

sel等於零的行 - 全部為零, c的相應列應該被忽略。

結果:

>> [sel c]= max( A~=0, [], 2 )

sel =
 1
 1
 1
 1
 1
c =
 1
 1
 3
 2
 1

為了找到第一個非零行索引(對於每個列),您只需要在第一個維度上應用max

>> [sel r] = max( A~=0, [], 1 );

這是一個基於accumarray的解決方案,即使一行全為零也能工作。

A = [ -1   0  -2   0   0
   2   8   0   1   0
   0   0   3   0  -2
   0  -3   2   0   0
   1   2   0   0  -4];

[r,c] = find(A);

%# for every row, take the minimum column index and put NaN if none is found
firstIndex = accumarray(r,c,[size(A,1),1],@min,NaN);

您可以通過執行每行的查找功能來執行此操作,如下所示:

A = [ -1   0  -2   0   0
   2   8   0   1   0
   0   0   3   0  -2
   0  -3   2   0   0
   1   2   0   0  -4];

% make cell of rows
cellOfRows = num2cell(A, 2);

% apply find function for each row
indexOfFirstNonZeroValues = cellfun(@(row) find(row, 1, 'first'), cellOfRows);


indexOfFirstNonZeroValues =

     1
     1
     3
     2
     1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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