我在matlab中有两个矩阵,
> IRwindow =
>
> **183** 171 150 125 137
138 167 184 173 152
105 114 141 167 185
148 113 105 115 141
186 183 147 112 105
>
> ILwindow =
>
> **201** 170 165 177 203
181 174 167 169 189
154 150 156 168 181
187 175 158 131 144
173 186 183 167 141
Run Code Online (Sandbox Code Playgroud)
我想逐个元素地减去这两个矩阵并获得结果; 例如,对于第一个元素(183 - 201 = -18)但是该元素的输出给出零.结果结果如下:
> IRwindow - ILwindow
ans =
**0** 1 0 0 0
0 0 17 4 0
0 0 0 0 4
0 0 0 0 0
13 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我怎么能保持真实的结果呢?在我的结果矩阵中没有为负数得零
运行以下示例代码:
%# Create random matrices
X = randi(100, 5, 5);
Y = randi(100, 5, 5);
%# Convert to strictly non-negative format
X = uint8(X);
Y = uint8(Y);
%# Perform subtractions
A = X - Y;
%# Convert to double format
X = double(X);
Y = double(Y);
%# Perform subtraction
B = X - Y;
Run Code Online (Sandbox Code Playgroud)
对于给定的样本运行:
A =
0 15 36 0 0
0 0 0 0 3
0 0 0 25 0
13 0 15 0 0
0 49 0 0 14
Run Code Online (Sandbox Code Playgroud)
而:
B =
-8 15 36 -4 -65
0 -47 -45 -11 3
-18 -17 -11 25 -52
13 -53 15 -15 -1
-35 49 -47 -8 14
Run Code Online (Sandbox Code Playgroud)
您会注意到所有负数A都被0替换,而负数B则正确显示.
简单地说:如果你使用的数字格式不能存储负数,那么Matlab截断为0.解决方案是转换为能够容纳"真实"数字(或其近似值)的格式,例如double,或者是你的情况的一个int格式可能更合适,比如int8,int16,int32或int64.