먼저 0이 아닌 요소matlab에 각 행 또는 열의 예
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];
방법 I는 각 행의 첫 번째 제로 벡터 요소를 얻을 수 있는가?
먼저 0이 아닌 요소matlab에 각 행 또는 열의 예
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];
방법 I는 각 행의 첫 번째 제로 벡터 요소를 얻을 수 있는가?
다음과 같이 각 행에 대해 find 기능을 실행하여 작업을 수행 할 수 있습니다
다음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
모두 0의 행이 있으면이 작업은 실패합니다. – Jonas
연속 모두 0 인 경우에도 작동합니다 accumarray 기반으로하는 솔루션이다. 무시해야 모든 0과 1 c
의 해당 열이 - 어떤 sel
equalse 제로에 대한
>> [sel, c] = max(A ~=0, [], 2);
행 :
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);
+1 다용도'accumarray'는 –
입니다. 참고로, 'accumarray'는 크기를''(', ')' '로 지정해야하기 때문에' [M 1]'(적어도 MATLAB 버전에서) – KQS
당신은 max
를 사용할 수 있습니다.
결과 :
당신은 단지 첫 번째 차원에max
를 적용해야합니다 (각 열에 대한) 최초의 비 - 제로 행 인덱스를 찾기 위해
>> [sel c]= max(A~=0, [], 2)
sel =
1
1
1
1
1
c =
1
1
3
2
1
:
>> [sel r] = max(A~=0, [], 1);
더 큰 행렬을 작업 할 때'find'가 폭발 할 수있는 더 나은 해결책입니다. – Maddy
당신이 무엇을 기대 "all zeros"행이 있다면? – Shai