2016-04-11 4 views
1
>> v1 
    [0.6324] [0.0975] [0.2785] 

>> c1 
    [0.8147] [0.9058] [0.1270] [0.9134] 

>> c1{1:3} = v1{1:3} 

Я получаю следующее сообщение об ошибке:Matlab массив ячеек элемент Назначение

Правая сторона этого задания имеет слишком мало значения, чтобы удовлетворить левые.

Здесь c1 и v1 являются простыми массивами клеток, то есть, оба имеют простые числовые значения. Тогда почему это не должно работать?

ответ

3

При использовании фигурных скобок {} вы являетесь , выбирая значениями ячеек. Используйте обычные скобки (), чтобы обратиться к набору ячеек и, следовательно, хранить ячейки без извлечения фактического содержимого. Таким образом, следующая строка будет назначать клетки (а не значения внутри клеток) с правой стороны к левой стороне:

c1(1:3) = v1(1:3) 

Мы можем проверить тип данных c1(1:3) легко увидеть, что на самом деле клетки -array:

>> A = c1(1:3) 
A = 
    [1] [2] [3] 
>> class(A) 
ans = 
cell 

Чтобы увидеть, что фигурные скобки {} извлечь значения себя, мы можем сделать следующее и посмотрите, что тип данных B является двойной:

>> B = c1{1} 
B = 
    1 
>> class(B) 
ans = 
double 

Как @Dan упоминает в своем комментарии, v1{1:3} дает вам comma-separated list трех отдельных дублей. Вы можете заметить, что, рассматривая три ans = с помощью командной строки, так как все значения будут возвращены по отдельности:

>> v1{1:3} 
ans = 
    1 
ans = 
    2 
ans = 
    3 

После этого, вы можете выполнить задание по-другому, что я не рекомендую. Ниже приведены три элемента LHS с помощью оператора конкатенации [], RHS предоставляет три элемента, а также мы видели выше.

>> [c1{1:3}] = v1{1:3} 
c1 = 
    [1] [2] [3] [7] 
+2

Просто добавить к этому, 'v1 {1: 3}' будет фактически возвращать список через запятую из трех отдельных дублей, так что вам нужно будет назначить его на три отдельные места на РИТАХ поэтому ошибка сообщение говорит, что он говорит. – Dan

+0

@ Dan Я включил часть, касающуюся вас. – Matt

Смежные вопросы