5

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

我想逐元素减去这两个矩阵并得到结果;例如对于第一个元素(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

我怎样才能保持真实的结果?我的结果矩阵中的负数不为零

4

3 回答 3

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;

对于给定的示例运行:

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

尽管:

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

你会注意到所有的负数A都被0替换了,而负数B显示正确。

简单地说:如果您使用无法存储负数的数字格式,则 Matlab 会在 0 处截断。解决方案是转换为能够容纳“实”数(或其近似值)的格式,例如double,或者在您的情况下,其中一种格式可能更合适,int例如int8,或.int16int32int64

于 2013-02-04T00:02:17.110 回答
2

另一种选择是在一行中使用single或减法,如下所示:double

 ans=double(IRwindow-ILwindow) 
于 2013-02-04T00:10:53.987 回答
0

我没有遇到与您相同的问题:我有以下代码:

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]


IRwindow - ILwindow

我得到这个输出:

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


ans =

   -18     1   -15   -52   -66
   -43    -7    17     4   -37
   -49   -36   -15    -1     4
   -39   -62   -53   -16    -3
    13    -3   -36   -55   -36

检查您创建的矩阵是否正确创建(作为双精度数而不是无符号整数)。

于 2013-02-04T00:04:20.290 回答