Question

I have a matrix C.

I want to add a calculated value in a box where there is NaN.

The solution is the matrix B.

I have the matrix and vector Ampiezza = [ 0.5 0.6 0.7]

C = [               
    0.41 6.36   15.44
    0.28 6.37   15.03
    0.25 6.05   14.90
    0.25 6.05   13.50
    NaN  6.05   12.64
    NaN  6.05   12.19
    NaN  5.09   11.81
    NaN  4.45   9.29
    NaN  3.82   9.23
    NaN  3.82   8.82
    NaN  3.50   8.43
    NaN  2.54   8.18
    NaN  2.22   8.15
    NaN  NaN    5.60
    NaN  NaN    NaN
    NaN  NaN    NaN
    NaN  NaN    NaN 
                          ]

Ampiezza = [ 0.5 0.6 0.7]

B = [       
    0.41  6.36  15.44
    0.28  6.37  15.03
    0.25  6.05  14.90
    0.25  6.05  13.50
    0.75  6.05  12.64
    NaN   6.05  12.19
    NaN   5.09  11.81
    NaN   4.45  9.29
    NaN   3.82  9.23
    NaN   3.82  8.82
    NaN   3.50  8.43
    NaN   2.54  8.18
    NaN   2.22  8.15
    NaN   2.72  5.60
    NaN   NaN   6.10
    NaN   NaN   NaN
    NaN   NaN   NaN
                        ]

example:

[Row4, Col1] = 0.25 
I need to replace the NaN in [Row5, Col1] and add 
[Row5, Col1] = [Row4, Col1] + 0.5; 
but 
for i = 6:17 
[Row (i), Col1] = NaN 
I have to do this for all the columns 

[Row13, Col2] = 2.22 

[Row14, Col2] = [Row13, Col2] + 0.6; 

but 
for i = 3:17 
[Row (i), Col1] = NaN 

I have to make this work for a matrix (30,14) and the vector is Ampiezza (1,14)

Was it helpful?

Solution

This assumes that every column of C contains at least one numeric entry and then at least one NaN (as in your example):

[~, col] = max(isnan(C)); %// find index of first NaN column
ind = col + (0:size(C,2)-1)*size(C,1); %// convert to linear index
B = C; %// initiallize B
B(ind) = B(ind-1) + Ampiezza; %// change entries as desired
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top