【问题标题】:changing some values according to a logical index in a specified region of a matrix根据矩阵的指定区域中的逻辑索引更改某些值
【发布时间】:2016-07-16 16:30:09
【问题描述】:

我有一个矩阵,我有兴趣更改满足该矩阵内特定条件的值,具体取决于它们的位置。假设我有一个矩阵 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 的原因,它存储所有成员的列索引。

标签: matlab matrix indexing


【解决方案1】:

这可能不是您想要的,但如果您有很多这样的任务,它会有所帮助:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多