find the last non-zero column in matrix in pre-allocated matrix

5 vues (au cours des 30 derniers jours)
Mahsa
Mahsa le 16 Oct 2014
Réponse apportée : Mahsa le 27 Mar 2015
Hello, My matlab code is creating very very matrix and I didn't pre-allocate it before. Because I always need to know the size of matrix. However, due to memory problem I had to make a very large zero matrix and fill in the matrix with new value. Any my question is to how to find the last non-zero column in that matrix "in the most efficient way". for exam if I have a matrix M = zeros(10^9,6) and there is some value like the follwign matrix how to find row 6 as the answer. Thank you,
M= [3388 3279 3284 3383 3279 3278; 3388 3383 2043 2038 2038 0; 3387 3388 2038 2037 2032 2037; 3388 3389 3384 3383 2038 0; 3388 3279 3280 3389 3274 3279; 0 0 0 0 0 0; 0 0 0 0 0 0]

Réponse acceptée

Mohammad Abouali
Mohammad Abouali le 16 Oct 2014
Modifié(e) : Mohammad Abouali le 16 Oct 2014
1) if you are looking for las non-zero column why the answer to your example is row 6?
2) if you are looking for last non-zero row, shouldn't the answer to your example be 5? in that case find(any(M,2),1,'last') would give 5 as the answer

Plus de réponses (3)

Geoff Hayes
Geoff Hayes le 16 Oct 2014
Modifié(e) : Geoff Hayes le 16 Oct 2014
Mahsa - try using the any function to determine which rows have at least one non-zero element as
nzRows = any(M,2);
nzRows will be a vector of ones and zeros where a one indicates that the row has at least one non-zero element, and a zero indicates that all elements in the row are all zero. The use find to find the last element in nzRows that is a one. Type doc find for details on how to use this function.

Mahsa
Mahsa le 27 Mar 2015
another way is to delete the zeros
if m = [ 1 2 3 4 5 0 0 0 0 0 0 0 0] m(m==0)=[] m= [1 2 3 4 5];
However my question is what to do if zero is one of the real values like the following example:
m = [ 1 2 0 3 4 0 5 0 0 0 0 0 0 0 0];
I'm looking for a command that gives me
m = [ 1 2 0 3 4 0 5]
Thank you

Mahsa
Mahsa le 27 Mar 2015
Oh I see it can be answered by find(any(M,1),1,'last')

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by