我有這個單元陣列
>> FooCellArray
FooCellArray =
1×7 cell array
Columns 1 through 4
{'Foo1'} {'Foo2'} {'Foo3'} {'Foo4'}
Columns 5 through 7
{'Foo5'} {'Foo6'} {'Foo7'}
cell2mat()將陣列轉換為字符陣列,而不是'Foo1'...的 1x7 或 7x1 矩陣'Foo7'。
>> (cell2mat(FooCellArray))'
ans =
28×1 char array
'F'
'o'
'o'
'1'
'F'
'o'
'o'
'2'
'F'
'o'
'o'
'3'
'F'
'o'
'o'
'4'
....
為什么?
uj5u.com熱心網友回復:
cell2mat正在做這里記錄的正確的事情。每個cell元素都是char大小為 1xN 的向量。您的整體cell陣列為 1xN。按照陣列cell2mat的形狀定義的“自然”方向連接每個單元格的內容。cell您的原件cell看起來有點像這樣:
FooCellArray = [{'Foo1'}, {'Foo2'}]
的效果cell2mat基本上就像你洗掉了{},所以你留下了
cell2mat(FooCellArray) --> ['Foo1', 'Foo2']
因此這被連接成一個單一的char向量'Foo1Foo2'。
與 的向量double而不是 的向量進行比較char:
>> FooCellArray = [{[1,2,3]}, {[4,5,6]}]
FooCellArray =
1×2 cell array
{[1 2 3]} {[4 5 6]}
>> cell2mat(FooCellArray)
ans =
1 2 3 4 5 6
uj5u.com熱心網友回復:
有一個較小的起始示例:
FooCellArray = {'Foo1','Foo2','Foo3'} ;
如果您的 MATLAB 版本 >= 2017b
您可以直接使用該功能convertCharsToStrings:
>> convertCharsToStrings(FooCellArray)
ans =
1×3 string array
"Foo1" "Foo2" "Foo3"
這種方法的好處是,即使您的元胞陣列中包含的字串長度不同,它也可以作業。如果您希望它作為列而不是線向量,您可以轉置它。注意結果型別的術語,它是一個string array.
如果您的 MATLAB 版本較舊并且元胞陣列中的所有字串都具有相同的長度,則可以將元胞陣列轉換為二維字符陣列:
>> reshape(cell2mat(FooCellArray),4,[]).'
ans =
3×4 char array
'Foo1'
'Foo2'
'Foo3'
對于這個,換位真的沒有意義。這個結果型別是 a char array,當它們是簡單的向量時是可以的,但是一旦它們是二維的,它們就會變得非常笨拙。主要是因為它們不像字串那樣靈活,每行必須有相同數量的元素。因此,正如@Adriaan 所指出的,如果您的其中一個單元格包含,Foo24那么該reshape命令將出錯。
編輯:或者正如 Chris Luengo 在評論中提到的那樣,一個更簡單的命令可以得到完全相同的結果:
>> cell2mat(FooCellArray.')
ans =
3×4 char array
'Foo1'
'Foo2'
'Foo3'
這具有相同的限制,所有單元格內容必須具有相同數量的字符,否則命令將出錯。
uj5u.com熱心網友回復:
在這種特殊情況下,一個 7x4 矩陣是有意義的,因為內容是字符。但是,MATLAB 在默認情況下不能這樣做。
考慮一下您的第二個字串將foo12改為的情況。您將在 6 個 1x4 字符陣列中擁有一個 1x5 字符陣列。這不適合整齊的 M×N 矩陣。所以 MATLAB 所能做的就是將所有東西組合成一個 N×1 陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/518375.html
標籤:matlab单元阵列
上一篇:表格未定義問題?
