稀疏向量之和:缺陷还是特征?

Rat*_*ert 4 arrays matlab matrix sparse-matrix array-broadcasting

我最近在 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
Run Code Online (Sandbox Code Playgroud)

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

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

Adr*_*aan 10

这是由于隐式广播和预期行为造成的,对于full()数组也是如此。比较:

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

ans =

     0     1
    18    19
Run Code Online (Sandbox Code Playgroud)

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

大小不等的向量会发生什么情况,它们被广播(“扩展”)为适当的大小以进行加法,请参阅此博客文章的深入解释。

详细地编写我们的玩具示例

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

ans =

     0     1
    18    19
Run Code Online (Sandbox Code Playgroud)