필터 지우기
필터 지우기

How to find the indices of non-zero elements in a matrix

조회 수: 61 (최근 30일)
S. David
S. David 2014년 6월 27일
편집: S. David 2014년 6월 30일
Hello,
I have an Na-by-Nt matrix which is sparse, i.e.: most elements are zeros. I want to find the indices of the non-zeros elements in the form of (i,j) where i is the row and j is the column.
I have then these two Na-by-1 vector a and Nt-by-1 vector tau. i corresponds to the ith element in a and j the jth element in tau, and I want to find them as well.
How can I do the above in an efficient way without the need for for loops?
Thanks

답변 (1개)

Cedric
Cedric 2014년 6월 27일
편집: Cedric 2014년 6월 27일
If it is for storing only non-zero elements, MATLAB supports SPARSE matrices. If you need to get row/column indices of non-zero elements of A:
[rId, cId] = find( A ) ;
and if you need values as well:
[rId, cId, val] = find( A ) ;
If you just need values, you can get them simply with
vals = A(A ~= 0) ;
  댓글 수: 11
Cedric
Cedric 2014년 6월 30일
편집: Cedric 2014년 6월 30일
I meant a simple/minimal numeric example showing which triplets you need to ID in which data structure, because I am not sure that anybody will have time to understand your code/algorithm.
If it is working but too slow, the first thing that comes to my mind is to replace the last double FOR loop with
A = complex( zeros( numel(s), Np * Ntau )) ;
colId = 0 ;
for pp=1:Np
theta_p=fc.*kron(1+Doppler_Tentative_Set(pp),ones(N))-fr;
Gamma_p=exp(1i*pi*T.*theta_p).*sinc(T.*theta_p);
for tt=1:Ntau
Lambda_p_diag = exp(-1i*2*pi.*(f0+(0:N-1)/T).*Tau_Tentative_Set(tt));
colId = colId + 1 ;
A(:,colId) = bsxfun( @mtimes, Gamma_p, Lambda_p_diag ) * s ;
end
end
S. David
S. David 2014년 6월 30일
편집: S. David 2014년 6월 30일
It is difficult to give a non real example. However, I think it is not necessary to understand the code/algorithm. At the end, the code will give A, v, and the sparse solution xVec. That is all is needed I guess.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by