例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]
這列作爲列,我想輸出四個元素的組:如何在matlab中對矩陣中的元素進行分組?
1100
1000
1110
如何做到這一點?我用accumarray()
嘗試過,但它不起作用。
例如,我有[1;1;0;0;1;0;0;0;1;1;1;0]
這列作爲列,我想輸出四個元素的組:如何在matlab中對矩陣中的元素進行分組?
1100
1000
1110
如何做到這一點?我用accumarray()
嘗試過,但它不起作用。
這是怎麼回事?
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'
假設你的載體僅包含元素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
‘)和1
至49
(ASCII字符’1
」)char(...)
你的矩陣轉換爲字符類型矩陣中的所有值。.'
將矩陣置換到最後得到n * 4矩陣。結果:
bvec =
1100
1000
1110
您需要在重塑後轉置矩陣,否則列/行索引將會出錯。或者,也可以加載行向量而不是列向量。 – GameOfThrows
是的,它工作在我想要的方式。 – Snehal
@GameOfThrows,Snehal - 你是對的,這需要修復。但我現在必須離開! ;) –
不知道你真正想要的輸出,你可以把它在實際Matlab的語法到你的問題? 3個整數或3x4矩陣的數組?或者也許別的東西? – Daniel
查看索引方法,'reshape'和'num2str'函數。 HTH –
我有[1; 1; 0; 0; 1; 0; 0; 0; 1; 1; 1; 0]這列作爲列,我想輸出四個元素的組:'1100''1000''1110 '像這樣不像字符串 – Snehal