Matlab矩阵一对一对应索引

时间:2015-08-05 17:58:59

标签: matlab indexing

我有一个小代码,用于img矩阵的一对一对应索引

for k = 1:length(I)
    img(I(k),J(k)) = 0;   
end

现在,我希望摆脱for循环,但我找不到合适的matlab语法来实现它。

img(I(1:length(I)), J(1:length(I)),1:3) = 0; 

不是一对一的对应索引。任何帮助实现相同的功能是值得赞赏的。

2 个答案:

答案 0 :(得分:1)

可以使用sub2ind函数:

以多个维度以线性方式进行索引
img(sub2ind(size(img), I, J(1:length(I))) = 0;

答案 1 :(得分:1)

您也可以使用sparse完成此操作:

ind = sparse(I, J, 1, size(img,1), size(img,2)) == 1;
img(ind) = 0;

第一行代码生成一个稀疏矩阵,其中存储在I中的行值和存储在J中的列值将矩阵值设置为1,我们确保它的大小相同作为你的形象。我们还通过将语句等同于1来转换为逻辑数组。完成后,只需使用结果索引到实际数组并将值设置为0.

如果你有一个多频道矩阵,你可以通过拨打repmat暂时执行此操作:

img(repmat(ind, [1 1 size(img,3)])) = 0;