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)