根据矩阵的指定区域中的逻辑索引更改某些值

时间:2016-07-16 16:30:10

标签: matlab matrix indexing

我有一个矩阵,我有兴趣根据它们所处的位置,以不同的方式更改满足该矩阵内某个条件的值。假设我有一个矩阵smallPic。如何获得具有相同尺寸的矩阵smallPicB,将前两列中所有超过50的值更改为255,而将第三列和第四列中的值更改为180?

我有这个代码可以工作,但它非常难看,需要拆分矩阵并再次连接它:

smallPic1=smallPic(:,1:2);smallPic1(smalllPic1>50)=255;
smallPic2=smallPic(:,3:4);smallPic2(smalllPic2>50)=180;

smallPicB = [smalllPic1 smalllPic2];

如何在一个命令中将逻辑索引与标量索引结合起来?

这不起作用:

smallPic(:,smallPic(:,3:4)>50) = 180

这里,括号内第二次提到smallPic不允许索引到smallPic的正确位置,因为它与smallPic没有相同的尺寸。因此,该命令实际上替换了smallPic的前两列中与第三列和第四列中大于50的值相同的行中的值,而不是替换第三列和第四列中的值。

还有其他建议吗?

1 个答案:

答案 0 :(得分:2)

这可能不是你正在寻找的东西,但如果你有很多这样的作业,它会有所帮助:

J = repmat(1:size(smallPic, 2), size(smallPic, 1), 1)
smallPic((J<3)&(smallPic>50))=255
smallPic((J>2)&(J<5)&(smallPic>50))=180

如果列索引不连续,您也可以调用ismember函数:

smallPic(ismember(J, [[1:2 5:6]])&(smallPic>50))=255