matlab:没有sub2ind的一个索引的寻址

时间:2011-05-04 15:38:03

标签: matlab vectorization

这与this other question密切相关,但由于性能问题,该问题希望避免sub2ind。我更关心使用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,您处理的元素位置与您实际想要处理的矩阵中的元素位置相同。 / p>

2 个答案:

答案 0 :(得分:2)

您可以将以前列中的行数添加到rchoice以直接获取线性索引。

nRows = size(z,1); %# in case you don't know this already
nCols2write = length(newvals);
z(rchoice+[0:nRows:(nRows*(nCols2write-1)]) = newvals;

答案 1 :(得分:2)

有一种很多更简单的方法。

nCols=size(z,2);
z(rchoice,1:nCols)=diag(newvals);