我最近在 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) 元素的存在非常令人費解。直觀地說,我希望得到一個零(無元素)或一個錯誤,表明向量的大小不兼容。我在檔案中找不到這種行為的解釋。
那么,這是一個錯誤還是一個功能?
uj5u.com熱心網友回復:
這是由于隱式廣播和預期行為,也適用于full()
陣列。相比:
bsxfun(@plus, [0 1], [0; 18])
ans =
0 1
18 19
(我正在運行 R2007b,所以需要bsxfun()
而不是隱式廣播)。
大小不等的向量會發生什么情況,它們會被“擴展”成適當的大小以進行添加,請參閱此博客文章以進行深入解釋。在我們的玩具示例a
中,廣播 to[0, 1; 0, 1]
和b
to [0, 0; 18, 18]
,當每個元素添加到另一個矩陣中的等效索引時,您會看到答案。
uj5u.com熱心網友回復:
這實際上與完整陣列類似,即不限于稀疏向量,這是根據檔案的正常行為(請參閱添加行和列向量部分)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/507938.html