首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab简单矩阵流形

Matlab简单矩阵流形
EN

Stack Overflow用户
提问于 2015-07-07 12:15:33
回答 5查看 62关注 0票数 1

我对Matlab很陌生,我想实现一个非常简单的操作:我有一个名为mg的792x1046 uint8矩阵,并希望将它的单元格值(从0到255)转换为1到4之间的值(1,2,3,4),相应地,在一个名为mgc的新矩阵中将其转换为简单的条件。

奇怪的是,新的矩阵只有1s和2s,但没有任何3s或4s.

这是我的代码:

代码语言:javascript
复制
[x,y]=size(mg);
mgc = zeros(x,y);

for i=1:x
    for j=1:y
        if (mg(i,j)<=100) 
            mgc(i,j)=1;
        elseif (100<mg(i,j)<=110) 
            mgc(i,j)=2;
        elseif (110<mg(i,j)<=120) 
            mgc(i,j)=3;
        else
            mgc(i,j)=4;
        end
    end
end

如果有人能帮我解决这个愚蠢的问题,那就太好了!THX

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-07-07 12:29:10

你不应该在MATLAB中使用像100<mg(i,j)<=110这样的表达式。相反,使用类似于100<mg(i,j) && mg(i,j)<=110的东西。

目前,MATLAB正在将表达式100<mg(i,j)<=110评估为(100<mg(i,j))<=110(100<mg(i,j))将是1或0(真或假),因此永远是<=110。所以它永远不会超过第二个,你的数组要么是1,要么是2。

编辑:虽然这个答案解释了你所面临的具体问题,但你可能应该使用逻辑索引,这比双for循环(在MATLAB中更惯用)要高效得多。请参阅@excaza或@Benoit_11中的答案以获得此方面的示例)。

票数 1
EN

Stack Overflow用户

发布于 2015-07-07 12:30:37

正如注释中所述,您需要在elseif语句中使用逻辑运算符。正如您所知道的,您可以使用相同的逻辑运算符将整个for循环矢量化,如下所示:

让我们像定义mgc2一样定义mgc

代码语言:javascript
复制
mgc2 = zeros(x,y);

然后您可以像这样填充mgc2

代码语言:javascript
复制
mgc2(mg<=100) =1;
mgc2(mg>100 & mg<=110) =2;
mgc2(mg>110 & mg <=120) =3;
mgc2(mg>120) =4;
票数 1
EN

Stack Overflow用户

发布于 2015-07-07 12:31:13

您需要使用and操作符:

代码语言:javascript
复制
% Dummy data
mg = [10 115; 125 140];

[x,y]=size(mg);
mgc = zeros(x,y);

for i=1:x
    for j=1:y
        if (mg(i,j)<=100) 
            mgc(i,j)=1;
        elseif (100 < mg(i,j) && mg(i,j) <= 110) 
            mgc(i,j)=2;
        elseif (110 < mg(i,j) && mg(i,j) <= 120) 
            mgc(i,j)=3;
        else
            mgc(i,j)=4;
        end
    end
end

返回:

代码语言:javascript
复制
mgc =

     1     3
     4     4

您也不需要在这里使用循环,而是可以利用MATLAB的逻辑索引

代码语言:javascript
复制
% Dummy data
mg = [10 115; 125 140];
mgc = zeros(size(mg));

mgc(mg <= 100) = 1;
mgc((mg > 100 & mg <= 110)) = 2;
mgc((mg > 110 & mg <= 120)) = 3;
mgc(mg > 120) = 4;

返回相同的矩阵。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31268316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档