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

标签 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 的值在同一行的值,而不是替换第三和第四列中的值本身。

还有什么建议吗?

最佳答案

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

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/

相关文章:

matlab - 如何使用matlab与uci协议(protocol)进行通信

使用 FDM 的 Matlab 2D 波动方程

performance - MATLAB for 循环索引的最佳实践

MATLAB:打印来自不同向量的元素的比较列

matlab - 确定Matlab中的编译器

r - 将向量复制到矩阵r

python边缘列表到邻接矩阵

python - 如何在不使用Python库的情况下从单行输入生成矩阵?

javascript - 如何捕获迭代数组的索引(Javascript)

python - 内存数据库 : no indexes, 中的 SQLite 加载到索引表中或加载后构建索引哪个更快?