這與this other question非常密切相關,但該問題想要避免sub2ind
,因爲性能問題。我更關心使用sub2ind
的「不雅」。matlab:尋址一個索引沒有sub2ind
我們假設我想創建另一個MxN矩陣,除了每列中的一個條目外,我想從矢量中的相應條目中分配一個全零矩陣,並且每列中行的選擇都基於另一個矢量。例如:
z = zeros(10,4);
rchoice = [3 1 8 7];
newvals = [123 456 789 10];
% ??? I would like to set z(3,1)=123, z(1,2)=456, z(8,3)=789, z(7,4)=10
我可以使用sub2ind
來完成這項(我在an answer to a closely related question使用):
z(sub2ind(size(z),rchoice,1:4)) = newvals
但有另一種選擇?看起來像邏輯尋址可以某種方式使用,但是我很困惑,因爲爲了將邏輯矩陣的元素設置爲1,您需要處理與您實際需要處理的矩陣中相同的元素位置。
聰明你,獎勵你應該...... – 2011-05-04 20:58:52
這實際上創建一個NxN矩陣,或者是MATLAB足夠聰明,知道我的意思嗎?如果我有1000個值,這是行不通的還是內存不足? – 2011-05-04 21:00:11
'diag'將創建一個'NxN'矩陣。我沒有打擾使用稀疏,因爲這只是一個概念性的例子。如果你有大量的值,你可以使用'spdiags(newvals',0,N,N)'。這隻使用'N'元素,所以不會耗盡內存。 – abcd 2011-05-04 21:04:17