在matlab中减去两个矩阵,结果中的负值被零替换

far*_*rsa 5 matlab matrix

我在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)

我怎么能保持真实的结果呢?在我的结果矩阵中没有为负数得零

Col*_*ers 6

运行以下示例代码:

%# 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,int32int64.