【问题标题】:How can i replace some elements of a matrix by other numbers in MATLAB?如何在 MATLAB 中用其他数字替换矩阵的某些元素?
【发布时间】:2018-04-24 10:08:34
【问题描述】:

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

M = 11001100101100001011010001001100101000101110010110001‌​10000101010110010111‌​0111001...

我如何拆分每 3 个元素并将它们替换为另一个元素。例如000 By 000000110 By 000001001 By 00001100 By 0001101 By 001010 By 01011 By 1

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

  Lookup_In  = [  000      110      001    100    101  010  011 ] ;
  Lookup_Out = {'000000','000001','00001','0001','101','01','1' } ;
  StrOut = repmat({'Unknown'},size(M)) ;
  [tf, idx] =ismember(M, Lookup_In) ;
  StrOut(tf) = Lookup_Out(idx(tf))

【问题讨论】:

标签: matlab matrix replace binary


【解决方案1】:

这里的M是用1000二进制元素随机生成的:

rng(1);
M = randi([0 1], 1,1000);
fprintf('%d\n',M)

首先,我对 M 进行了零填充以达到 3 的长度倍数。其次,我在矩阵中重新调整数组的形状,每行包含 3 个元素并应用 Lookup_Out

c = mod(numel(M),3);
M = [M,zeros(1,3-c)]; %zeropadding to multiple of 3

M = reshape(M,[3,numel(M)/3])';

Lookup_In  = [  000      110      001    100    101  010  011 ] ;
Lookup_Out = {'000000','000001','00001','0001','101','01','1' } ;
StrOut = repmat({''},[1,size(M,1)]);

for r=1:size(M,1)
    StrOut{r} = Lookup_Out{str2double(sprintf('%d',M(r,:))) == Lookup_In};
end

【讨论】:

  • 谢谢。但我有一个这样的矩阵:M = 0011101010100011010111000100100100100000 ....首先我想分割每3个元素,例如:001、110、101、010,....然后将每3个元素替换为另一个元素。例如 000 By 000000, 110 By 000001 , ...
  • M = 0011101010100011010111000100100100100000是一个数字开始00,所以M = 11101010100011010111000100100100100000.我想你可以考虑中号就像一个字符串,M = '0011101010100011010111000100100100100000'?您可以使用 M = str2num(M(:))'; 将其转换为数值数组
  • M 是二进制矩阵
  • 为避免歧义,能否提供 MATLAB 在命令窗口中显示的M
  • M = 01101101001011001110010001010010010010001110100110110001011010001001100100101101101100110001001101001001110001110110001010010010000 ...我是新英语语言。我希望我理解你正确:)
猜你喜欢
  • 1970-01-01
  • 2013-09-25
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
  • 1970-01-01
相关资源
最近更新 更多