- anything less than -0.5 in test (or more technically, anything in the interval [-Inf, -0.5) in test) to be 1 in the result
- anything in the interval [-0.5, 0.5) in test to be 4 in the result
- anything in the interval [0.5, 3) in test to be 9 in the result
- anything greater than or equal to 3 in test (in the interval [3, Inf]) to be 16 in the result
- and everything else (the NaN values) to be NaN.
Replacing Values in Matrix that are not equal to 1 while excluding 'NaN'
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
I have a globally gridded 3D matrix of air temperature where the 'z' dimension is time. I need to convert all values within the matrix to 1 or 0 depending on whether the values are above or below 0. All temperature values that would fall over water are missing and have been replaced with NaN. I use the following lines to convert the matrix to 1's and 0's, but it also converts the NaN's to 0. I don't want this to happen.
This is currently what I have:
temp_final_1(temp_final_1 > set_point) = 1;
temp_final_1(temp_final_1 ~= 1) = 0;
I tried this, but get an error: "Operands to the logical and (&&) and or (||) operators must be convertible to logical scalar values."
temp_final_1(temp_final_1 > set_point) = 1;
temp_final_1(temp_final_1 ~= 1 && ~isnan(temp_final_1)) = 0;
For example, this is what I am trying to accomplish. The actual values are much more varied than this.
Test1 is before values are changed to 0 or 1 if they are below or above 0 and Test2 shows this with the NaN's still intact
test1 =
NaN 2 9 2
-.23 NaN 3 2
-1 -1 NaN 6
-.4 -1 -.57 NaN
test2 =
NaN 1 1 1
0 NaN 1 1
0 0 NaN 1
0 0 0 NaN
0 comentarios
Respuestas (3)
Steven Lord
el 3 de Ag. de 2022
There are a couple different approaches you can use. With just one dividing level I'd probably just use two logical operations as @David Hill and @Les Beckham did. But if there were multiple levels I'd consider using discretize.
test = [
NaN 2 9 2
-.23 NaN 3 2
-1 -1 NaN 6
-.4 -1 -.57 NaN]
Let's make:
I've added spaces to resultValues below to put the replacement values below the comma separating the two ends of the intervals whose values will be replaced by those values.
intervalEdges = [-Inf, -0.5, 0.5, 3, Inf];
resultValues = [ 1, 4, 9, 16];
result = discretize(test, intervalEdges, resultValues)
David Hill
el 2 de Ag. de 2022
test2=test1;
test2(test2==2)=1;
test2(test2<0)=0;
3 comentarios
David Hill
el 2 de Ag. de 2022
Editada: David Hill
el 2 de Ag. de 2022
test1 =[NaN 2 9 2
-.23 NaN 3 2
-1 -1 NaN 6
-.4 -1 -.57 NaN];
test2=test1;
test2(test2<=0)=0;
test2(test2>0)=1
Les Beckham
el 2 de Ag. de 2022
test1 = [
NaN 2 9 2
-.23 NaN 3 2
-1 -1 NaN 6
-.4 -1 -.57 NaN]
test2 = test1;
test2(test1 > 0) = 1;
test2(test1 < 0) = 0
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!