Matlab简单矩阵manip

Matlab简单矩阵manip,matlab,if-statement,matrix,Matlab,If Statement,Matrix,我是Matlab新手,我想实现一个非常简单的操作:我有一个792x1046UINT8矩阵,名为mg,我想根据简单的条件将其单元格值(从0到255)转换为一个名为mgc的新矩阵中1到4(1,2,3,4)之间的值 奇怪的是,新矩阵中只填充了1和2,而没有任何3或4 这是我的密码: [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

我是Matlab新手,我想实现一个非常简单的操作:我有一个792x1046UINT8矩阵,名为mg,我想根据简单的条件将其单元格值(从0到255)转换为一个名为mgc的新矩阵中1到4(1,2,3,4)之间的值

奇怪的是,新矩阵中只填充了1和2,而没有任何3或4

这是我的密码:

[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
[x,y]=尺寸(mg);
mgc=零(x,y);
对于i=1:x
对于j=1:y

如果(mg(i,j)您不应该使用
100之类的表达式,这是因为对于第一个elseif语句,任何大于100的值都将返回true。

100如果要执行双重条件,必须使用
&
运算符,否则可能会出现错误的语句

>> x = 4

>> res = 2<x<=3

res =

     1

%%Using the `&` operator instead 

>> res = 2<x && x<=3

res =

     0
>x=4

>>res=2 res=2如注释中所述,您需要在
elseif
语句中使用逻辑运算符。正如您所知,您可以使用这些相同的逻辑运算符对整个for循环进行向量化,如下所示:

让我们定义
mgc2
,就像您对
mgc
所做的那样:

mgc2 = zeros(x,y);
然后您可以这样填充
mgc2

mgc2(mg<=100) =1;
mgc2(mg>100 & mg<=110) =2;
mgc2(mg>110 & mg <=120) =3;
mgc2(mg>120) =4;
mgc2(mg100&mg110&mg120)=4;

您需要使用
运算符:

% 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
您也不需要在此处使用循环,而是可以利用MATLAB:

%虚拟数据
mg=[10115;125140];
mgc=零(尺寸(mg));
mgc(mg100&mg110&mg120)=4;

它返回相同的矩阵。

您需要在
elseif
语句中使用运算符。感谢您的回复HamtaroWarrior,我确信有大于110的值,因为矩阵来自我在Matlab上处理的图像…非常奇怪,事实上,excaza是对的,没有注意到您的条件中缺少运算符。对!不是f我第一次遇到这种情况,已经花了太多时间试图找出错误的地方,以至于我忘记了检查基础。谢谢你,excazaThx!你知道如何在3D矩阵中使用这种逻辑索引方法吗?不客气!实际上几乎是一样的!试着用一个小的3D矩阵,然后玩一下它;在德兴功能非常强大,您肯定会喜欢使用它:)
mgc =

     1     3
     4     4
% 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;