2017-01-26 1 views
2

Ich habe ein Zellen-Array, in dem jede Zelle ein Array von Strings enthält. Ein Beispiel ist wie folgt:Verhindern, dass MATLAB einzelne Element-Arrays in einen Nicht-Array-Typ verwandelt

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

jedoch

example{1} 

gibt einen Array 1x2 Zelle, wohingegen

example{2} 

eine Zelle gibt, nicht eine 1x1 Zellenanordnung, wie erwartet. Dieser einzelne Zellenwert hat dann nicht das gleiche Format wie das einkapselnde Beispielzellenfeld, wodurch die Berechnungen weiter unten unterbrochen werden.

Wie behebe ich das? Idealerweise würde ich gerne ein 1x1-Zellen-Array haben und irgendwelche unangenehmen Spezialfälle vermeiden.

Antwort

3

In MATLAB gibt es keinen Unterschied zwischen einer Skalareinheit und einem 1 x 1-Array. Der Skalar ist einfach eine 1 x 1-Version des Arrays. Es gibt keine spezielle Array-Klasse, stattdessen ist ein Array einfach a list of objects that have the same class. Dies gilt unabhängig davon, ob es sich um ein double Array, ein char Array, ein struct Array oder in Ihrem Fall ein cell Array handelt (weitere Informationen here).

Als solcher example{2}gibt ein 1 x 1-Zellen-Array zurück. Sie können testen, example{2} tatsächlich eine 1 x 1-Zelle unter Verwendung class, size, iscell und/oder 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 

Da es sich um eine 1 x 1-Zellen-Array ist, sollte der Rest des Codes in der Lage zu handhaben es ohne Probleme (vorausgesetzt, Sie haben den Rest des Codes richtig geschrieben).

2

Ein Ein-Element-Zellen-Array ist immer noch ein Zellen-Array der Größe 1x1. Beachten Sie:

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

Sie können entweder separat zu testen, wenn Ihr Array der Größe 1x1 insbesondere weiter unten Ihren Code ist, oder, zu prüfen, ob die Indizierung der Zellenanordnung durch () Syntax irgendwie günstiger für Sie ist, zum Beispiel:

>> example(1) 
ans = 
    {1x2 cell} 
>> example(2) 
ans = 
    {1x1 cell} 
Verwandte Themen