2016-02-12 562 views
-2

例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]這列作爲列,我想輸出四個元素的組:如何在matlab中對矩陣中的元素進行分組?

1100 
1000 
1110 

如何做到這一點?我用accumarray()嘗試過,但它不起作用。

+0

不知道你真正想要的輸出,你可以把它在實際Matlab的語法到你的問題? 3個整數或3x4矩陣的數組?或者也許別的東西? – Daniel

+0

查看索引方法,'reshape'和'num2str'函數。 HTH –

+0

我有[1; 1; 0; 0; 1; 0; 0; 0; 1; 1; 1; 0]這列作爲列,我想輸出四個元素的組:'1100''1000''1110 '像這樣不像字符串 – Snehal

回答

0

這是怎麼回事?

A = [1;1;0;0;1;0;0;0;1;1;1;0]; 
B = reshape(A,4,3)'; %//DONT FORGET THE `'` or your results would be wrong... 
C = strcat(num2str(B)); %C is a char Array currently 

C = 

1 1 0 0 
1 0 0 0 
1 1 1 0 

刪除空格:

可以做C(:,2:3)= []; C(:,3:4)= []; C(:,4:5) = [];創建一個3 x 4字符數組:

C = 

1100 
1000 
1110 

但是,你爲什麼對嗎?所以,更好的方法是:

regexprep(cellstr(C),'[^\w'']',''); %//Now a cell Array. It is generally better practice to store strings as Cell Array instead of Char Array. 

ans = 

'1100' 
'1000' 
'1110' 
1

假設你的載體僅包含元素0和1,具有N * 4個元素:

bvec = [1;1;0;0;1;0;0;0;1;1;1;0]; 
bvec = char(reshape(bvec, 4, numel(bvec)/4) + '0').'; 

讓我們來分析一下:

  • reshape(bvec, numel(bvec)/4, 4); 將你的列向量(也可以是行向量)分解成一個有4行的矩陣(你的4位[?]組),它是一個4 * n類型的雙精度矩陣,
  • + '0'添加48的數值來表示ASCII字符'0';這個轉換的0所有值48(ASCII字符「0‘)和149(ASCII字符’1」)
  • char(...)你的矩陣轉換爲字符類型矩陣中的所有值。
  • .'將矩陣置換到最後得到n * 4矩陣。

結果:

bvec = 

1100 
1000 
1110 
+0

您需要在重塑後轉置矩陣,否則列/行索引將會出錯。或者,也可以加載行向量而不是列向量。 – GameOfThrows

+0

是的,它工作在我想要的方式。 – Snehal

+0

@GameOfThrows,Snehal - 你是對的,這需要修復。但我現在必須離開! ;) –

相關問題