【问题标题】:How to replace some elements of a matrix by other numbers in MATLAB?如何用MATLAB中的其他数字替换矩阵的某些元素?
【发布时间】:2017-11-11 03:01:23
【问题描述】:

我在 Matlab 中有一个由 1000 个二进制元素组成的矩阵,如下所示:

M = [011,011,001,010,011,000,010,100,100,...,...]

我想用其他数字替换一些元素:000 By 000000, 110 By 000001, 001 By 00001, 100 By 0001, 101 By 001, 010 By 01, 011 By 1。

我使用了这种方法,但不起作用。它有什么问题?

for i = 1:1000
    if M(i) == 000
        M(i) = 000000;
    elseif M(i) == 110
         M(i) = 000001;
         elseif M(i) == 001
               M(i) = 00001;
               elseif M(i) == 100
                 M(i) = 0001;   
                 elseif M(i) == 101
                 M(i) = 001; 
                 elseif M(i) == 010
                 M(i) = 01;
    else
         M(i) = 1;
    end
end

请帮帮我:)

【问题讨论】:

  • 为什么这不起作用?你有什么问题?它不会取代所需的值吗?还是它做了不正确的替换?
  • 它不会替换值
  • 在 MATLAB 中,000001 等文字数字被解释为浮点十进制数。相等运算符 (==) 检查这些数字的值是否相同,所以像 000 == 000000 这样的表达式基本上是检查零是否等于零,它确实如此。这同样适用于赋值 (=),所以 if M(i) == 000; M(i) = 000000; end 表示如果 M(i) 等于 0,则将零赋值给 M(i),这并没有做任何事情。

标签: matlab replace binary


【解决方案1】:

这里的问题是在matlab中,当你输入000时,它的意思是数字0。如果您想将其表示为000,一种方法是使用字符串'000'

我要先建立一个查找图表。

    Lookup_In  = [  000      110      001    100    101  010  011 ] ;
    Lookup_Out = {'000000','000001','00001','0001','101','01','1' } ;

然后,为答案构建一个空间,StrOut。 M 是原始输入。

    M = [011,011,001,010,011,000,010,100,100] ;        
    StrOut = repmat({'Unknown'},size(M)) ;

检查 M 中的元素是否可以在查找表 Lookup_In 中找到。

    [tf, idx] =ismember(M, Lookup_In) ;

输出最终结果。

    StrOut(tf) = Lookup_Out(idx(tf))

然后,你会得到

     '1'    '1'    '00001'    '01'    '1'    '000000'    '01'    '0001'    '0001'

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2013-09-25
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    相关资源
    最近更新 更多