Non zero min 3D matrix

4 views (last 30 days)
VISHNUPRIYA M S on 12 Mar 2019
Edited: madhan ravi on 12 Mar 2019
I have 3D matrix of A(k,l,t) where t is time. I want to find the non zero min of each row for every t.
for t =1:10
for k = 1:10
f(k,1,t) = max(A(k,:,t)(A(k,:,t)>0));
it shows error ()-indexing must appear last in an index expression.
I was trying to use f = min(A(A>0))

Accepted Answer

KSSV on 12 Mar 2019
A = rand(10,10,10) ;
for t =1:10
for k = 1:10
D = A(k,:,t) ;
D = D(D>0) ;
f(k,1,t) = max(D);

More Answers (1)

Raghunandan V
Raghunandan V on 12 Mar 2019
You can remove all the for loops and make it more effecient
A= rand(10,10,10);
A(A==0) = inf;
Here I am just replacing the 0 with inf and then finding the minimum. This code even works for matrix with negative integers. :)
madhan ravi
madhan ravi on 12 Mar 2019
Edited: madhan ravi on 12 Mar 2019
+1, Ah didn’t examine the code because OP mentioned row in the statement but in the code turns out to find for columns, good proposal then ;-) .In your code what will happen if a column is all zeros? Why do you say if that the second solution proposed by me will not work?, it was the continuation of your code after replacing zeros with infs. By the way when you said vice versa matrix has to be transposed that’s what permute() does , by the way min() function can be used to find the minimum along the specific dimension.If the dimension of A is dynamic then
permute(A,[2 1 3:ndims(A)])

Sign in to comment.


Find more on Resizing and Reshaping Matrices in Help Center and File Exchange




Community Treasure Hunt

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

Start Hunting!