2017-01-26 5 views
2

私は各セルに文字列の配列が含まれているセル配列を持っています。次のように例である:予想通りMATLABが単一要素配列を非配列型に変換できないようにする

example{2} 

は、細胞、NOT 1x1のセル配列を返し、一方

example = {{['a'], ['b']}, {['c']}} 

しかし、

example{1} 

は、1×2セルのアレイを返します。この単一セルの値は、カプセル化のサンプルセル配列と同じ形式にはなりません。

これを修正するにはどうすればよいですか?理想的には、私は1x1のセル配列を持つことができ、どんな厄介な特別なケースも避けたいと考えています。

答えて

3

MATLABでは、スカラーエンティティと1 x 1配列の違いはありません。スカラーは単に配列の1×1バージョンです。特別な配列クラスはありません。配列は単にa list of objects that have the same classです。 doubleアレイ、charアレイ、structアレイ、または場合によってはcellアレイ(詳細はhere)であるかどうかにかかわらず、これは当てはまります。

このように、example{2}は、に1 x 1セル配列を返します。あなたが実際にexample{2}をテストすることができ、それは1×1のセル配列ですので、あなたのコードの残りの部分が処理できる必要があります1×1 classを使用して、セル、sizeiscell、および/またはwhos

class(example{2}) 
% cell 

size(example{2}) 
% 1 1 

iscell(example{2}) 
% 1 

tmp = example{2}; 
whos('tmp') 
% Name  Size   Bytes Class Attributes 
% 
% tmp  1x1    114 cell 

ですそれは何の問題もありません(あなたがコードの残りの部分を正しく書いたと仮定して)。

2

1要素のセル配列は、依然としてサイズ1x1のセル配列です。例えば()構文によってセル配列のインデックスを作成すると、何らかの形であなたのために、より有益であるかどうかを検討し、あなたの配列は、コードのさらに下、特にサイズの1x1である場合は、別途のいずれかテストすることができます

>> class(example{1}) 
ans = 
cell 
>> class(example{2}) 
ans = 
cell 
>> size(example{1}) 
ans = 
    1  2 
>> size(example{2}) 
ans = 
    1  1 

を、あるいは:守っ

>> example(1) 
ans = 
    {1x2 cell} 
>> example(2) 
ans = 
    {1x1 cell} 
関連する問題