我有一个[500x500]的矩阵。我有另一个[2x100]矩阵,它包含可能在第一个矩阵内的坐标对。我希望能够将第一个矩阵的所有值更改为零,而不需要循环。
mtx = magic(500);
co_ords = [30,50,70; 30,50,70];
mtx(co_ords) = 0;
答案 0 :(得分:7)
您可以使用函数SUB2IND将您的下标对转换为线性索引:
mtx(sub2ind(size(mtx),co_ords(1,:),co_ords(2,:))) = 0;
答案 1 :(得分:1)
另一个答案:
mtx(co_ords(1,:)+(co_ords(2,:)-1)*500)=0;
答案 2 :(得分:0)
当我在三维中寻找类似的问题时,我偶然发现了这个问题。我有行和列索引,并希望更改与这些索引相对应的所有值,但是在每个页面中(因此整个第三维)。基本上,我想执行mtx(row(i),col(i),:) = 0;
,但不循环遍历行和col矢量。
我以为我会在这里分享我的解决方案,而不是提出一个新问题,因为它密切相关。
另一个不同之处在于我从一开始就可以使用线性索引,因为我使用find
来确定它们。为了清楚起见,我会把那部分包括在内。
mtx = rand(100,100,3); % you guessed it, image data
mtx2d = sum(mtx,3); % this is similar to brightness
ind = find( mtx2d < 1.5 ); % filter out all pixels below some threshold
% now comes the interesting part, the index magic
allind = sub2ind([numel(mtx2d),3],repmat(ind,1,3),repmat(1:3,numel(ind),1));
mtx(allind) = 0;