How to reference points in time in a matrix?
    5 views (last 30 days)
  
       Show older comments
    
I have 4 columns of time-series data ranging from t=1 to t=10.  I am interested in WHEN each time series become greater than zero.  So in this example, the second column would be t=7, for the 3rd column t=5, and for the 4th and 5th columns t=6.  I would like to return/generate a row that says t=[7,5,6,6] to represent the point in time for each column when the data becomes greater than 0.  I have no clue how to script this and don't even know where to start... Thank you in advance for any suggestions/guidance/tips!
1   0	    0	    0	    0
2   0	    0	    0	    0
3   0	    0	    0	    0
4   0	    0	    0	    0
5   0	    0.10	0	    0
6   0	    0.15	1.82	3.62
7   0.02	0.24	3.58	7.20
8   0.02	0.28	5.13	10.49
9   0.03	0.37	6.63	13.76
10  0.02	0.41	7.95	16.76
0 Comments
Accepted Answer
  David Fletcher
      
 on 6 Apr 2021
        
      Edited: David Fletcher
      
 on 6 Apr 2021
  
      a=[   0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;   0	    0.10	0	    0]
a=[a;  0	    0.15	1.82	3.62]
a=[a;  0.02	0.24	3.58	7.20]
a=[a;  0.02	0.28	5.13	10.49]
a=[a;  0.03	0.37	6.63	13.76]
a=[a;  0.02	0.41	7.95	16.76]
[r c]=find(a);
loc=[r c];
[loca locb]=ismember(1:size(a,2),loc(:,2));
rows=r(locb)
May need some more extensive testing, but something like this. I suspect it will do something nasty if a column has only zero values.
Alternatively, you may find a loop based solution to be a little less obtuse, and possibly more robust
a=[   0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;  0	    0	    0	    0]
a=[a;   0	    0.10	0	    0]
a=[a;  0	    0.15	1.82	3.62]
a=[a;  0.02	0.24	3.58	7.20]
a=[a;  0.02	0.28	5.13	10.49]
a=[a;  0.03	0.37	6.63	13.76]
a=[a;  0.02	0.41	7.95	16.76]
[rows cols]=size(a); % Find size of matrix
rowLocs=zeros(1,cols); % Set up output vector
for col=1:cols % loop through each column of the matrix 
    row=1;
    while row<=rows % loop through the rows in each column
        if a(row,col)~=0 % if a non-zero is found, record row and stop the row loop
            rowLocs(col)=row;
            break;
        end
        row=row+1; % next row
    end  
end
rowLocs % Show locations of first non-zero element in each column
More Answers (0)
See Also
Categories
				Find more on Particle & Nuclear Physics 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!
