我有一个矩阵,我有兴趣根据它们所在的位置,以不同方式更改满足该矩阵内特定条件的值。假设我有一个矩阵 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 的值在同一行的值,而不是替换第三和第四列中的值本身。
还有什么建议吗?
最佳答案
这可能不是您想要的,但如果您有很多这样的作业,它会有所帮助:
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
关于matlab - 根据矩阵指定区域中的逻辑索引更改某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38413202/