如何更改matrix中多个点的值?

我有一个matrix[500×500]。 我有另一个matrix[2×100],其中包含可能在第一个matrix内的坐标对。 我希望能够将第一个matrix的所有值更改为零,而无需循环。

mtx = magic(500); co_ords = [30,50,70; 30,50,70]; mtx(co_ords) = 0; 

您可以使用SUB2IND函数将下标对转换为线性索引:

 mtx(sub2ind(size(mtx),co_ords(1,:),co_ords(2,:))) = 0; 

另一个答案:

 mtx(co_ords(1,:)+(co_ords(2,:)-1)*500)=0; 

当我在三维寻找类似的问题时,我偶然发现了这个问题。 我有行和列的索引,并希望改变所有的值对应于这些索引,但在每一页(所以整个第三维)。 基本上,我想要执行mtx(row(i),col(i),:) = 0; 但是没有循环遍历行和列向量。

我想我会在这里分享我的解决scheme,而不是提出一个新的问题,因为它是密切相关的。

另一个区别是,从一开始我就可以得到线性指数,因为我使用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;