2017-11-11 262 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

相關問題