【问题标题】:Sum of sparse vectors: bug or feature?稀疏向量之和:错误还是特征?
【发布时间】:2023-01-16 17:49:32
【问题描述】:

我最近在 MATLAB R2022a 中偶然发现了以下行为:

>> a = sparse(1,2,1)
a =
   (1,2)        1

>> b = sparse(2,1,18)
b =
   (2,1)       18

>> a+b
ans =
   (2,1)       18
   (1,2)        1
   (2,2)       19

值为 19 的 (2,2) 元素的存在非常令人费解。直觉上,我希望得到一个零(无元素)或一个错误,表明向量的大小不兼容。我在文档中找不到对此行为的解释。

那么,这是错误还是功能?

【问题讨论】:

    标签: arrays matlab matrix sparse-matrix array-broadcasting


    【解决方案1】:

    这是由于隐式广播和预期行为,也适用于 full() 数组。相比:

    bsxfun(@plus, [0 1], [0; 18])
    
    ans =
    
         0     1
        18    19
    

    (我正在运行 R2007b,因此需要 bsxfun() 而不是隐式广播)。

    大小不等的向量发生的情况是它们被广播(“扩展”)到适当的大小以进行添加,请参阅e.g. this blog post 的深入解释。

    详细编写我们的玩具示例

    a = [0 1]
    b = [ 0
         18]
    
    a + b = [0 1] + [ 0
                     18]
    
          % Is broadcast to
          = [0 1     [ 0  0
             0 1] +   18 18]
    
          % element wise addition
          =  [ 0  1
              18 19]
    
    

    【讨论】:

      【解决方案2】:

      这实际上同样发生在完整的数组中,IE。不限于稀疏向量,根据documentation,这是正常行为(参见添加行和列向量部分)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        • 2014-10-30
        • 2013-09-25
        • 2019-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多