return row index of values greater than 0 to a 3 dimensional array

16 views (last 30 days)
I have a Matrix A, of m x n dimensions.
I wish to go through each row from left to right and return the index of values greater than 0. I have tried the folowing which returns the column index for the first row which has values. for example row 26.
I have tried the following but I am not getting the outputmatrix with all entries. I fear the entries are being overwritten
A =[2,-4,-0.5,0.34;0.01,4,-0.5,0.34;-10,4,-0.2,0.6;-10,4,-0.2,0.6;-19,15,-0.7,0.6];
% Now we have input matrix A we want to return the col index of each row element greater than 0.
% inputMatrix= A
outputMatrix=zeros(1,[],size(A,1));
for i = 26:size(A(2:end,:),1)
for ij = 1:size(A(2:end,:),2)
[rows, columns] = find(inputMatrix > 0)
outputMatrix=columns;
end
end
A =
2 -4 -0.5 0.34
0.01 4 -0.5 0.34
-10 4 -0.2 0.6
-10 4 -0.2 0.6
-19 15 -0.7 0.6
However I wish to go through each row, and store these column indices in a 3 dimensional array where each page represents the set of column indices from each row of A
Example output is a 3 dimensional array of column indices. - Matrix E
1, 4 (page 1)
1, 2, 4 (page 2)
2, 4 (page 3
2, 4 (page 4)
2,4 (page 5)
I then want to use these column indices to return the value from the corresponding rows of a matrix C and matrix D. Matrix C and D are the same dimentions as A
I then want to multiply C values by D values and return a 3 dimension array of results. - Matrix F
The results will be of the same dimension as Matrix E
Any help appreciated.
  7 Comments
Charles
Charles on 21 Apr 2019
i have updated the code somewhat. I hope its clearer.
Yes i understaqdn the page 2 is longer. Note sure what the answet is. Perhaps I can fill with zeros to make all the same length, but not sure how to do this
Charles
Charles on 21 Apr 2019
i also want to store the output in the output matrix and i wonder if i have the last line of the code
correct,s o that is store all indices and not overtirwe anything
outputMatrix=columns;

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 21 Apr 2019
Try this:
A = [2,-4,-0.5,0.34;0.01,4,-0.5,0.34;-10,4,-0.2,0.6;-10,4,-0.2,0.6;-19,15,-0.7,0.6];
[rows, columns] = find(A > 0)
  4 Comments
Charles
Charles on 21 Apr 2019
Edited: Charles on 21 Apr 2019
Hi Thanks for this. Your correct, but what I am seeking as output is merely the column index for elements > 0. in each row vector
Thus I am expecting is
1, 4
1,2,4
2, 4
2, 4
2, 4
i now know that in row 1 i have columns 1 and 4,
in row two, i have columns 1, 2, and 4 etc etc
I guress your output if correct afterall. I need to savre these answer in the outout matrix. how do I do that?
Charles
Charles on 21 Apr 2019
Output E, does represent the column indices you have prodcued with your answer, so your correct. i would like to fit the row and columns into the output matrix, so i I can use it to index into another matrix. How do i pllace tyhe indcies into the output matrix?

Sign in to comment.

More Answers (1)

Andrei Bobrov
Andrei Bobrov on 21 Apr 2019
[ii,jj] = find(A > 0);
out = accumarray(ii,jj,[],@(x){sort(x)'});
out{:}

Community Treasure Hunt

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

Start Hunting!