2017-11-11 111 views
1

我有一个矩阵由1000个二进制元素,如下面在Matlab:我如何用MATLAB中的其他数字替换矩阵的某些元素?

M = 11001100101100001011010001001100101000101110010110001 10000101010110010111 0111001 ...

我怎么能拆分每3个元素,并取代它们通过另一个元素。例如000到000000,110通过000001,001通过00001,100通过0001,101 001,010通过01,011由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)) 
+0

的可能重复[我怎样才能在编码MATLAB一些元素?(https://stackoverflow.com/questions/47235922/how-i-can-encode-some-elements-in-matlab) – m3tho

回答

1

M这里被随机地与1000二进制元素产生:

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

首先,我zeropadded 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 
+0

谢谢。但是我有这样的矩阵:M = 0011101010100011010111000100100100100000 ....第一i-要分割的每个3个元素,例如:001,110,101,010,....然后替换每个元件3通过另一个元件。例如000 000000 110 000001,... – user3637733

+0

M = 0011101010100011010111000100100100100000是一个数字开始00,所以M = 11101010100011010111000100100100100000.我想你可以考虑中号就像一个字符串,M = '0011101010100011010111000100100100100000'? 您可以使用M = str2num(M(:))'将其转换为数值数组; – m3tho

+0

M是二进制矩阵 – user3637733

相关问题