Вот пример того, что я ищу:
>> foo = [88, 12];
>> [x, y] = foo;
Я ожидал бы что-то вроде этого впоследствии:
>> x
x =
88
>> y
y =
12
Но вместо этого я получаю ошибки как:
??? Too many output arguments.
Я думал deal()
мог бы сделать это, но это, кажется, только работает над ячейками.
>> [x, y] = deal(foo{:});
??? Cell contents reference from a non-cell array object.
Как я решаю свою проблему? Я должен постоянно индексировать 1 и 2, если я хочу иметь дело с ними отдельно?
Вам вообще не нужен deal
(редактирование: для Matlab 7. 0 или более поздней версии) и, для вашего примера, вам не нужен mat2cell
; вы можете использовать num2cell
без других аргументов::
foo = [88, 12];
fooCell = num2cell(foo);
[x y]=fooCell{:}
x =
88
y =
12
Если вы хотите использовать deal
по какой-то другой причине, вы можете:
foo = [88, 12];
fooCell = num2cell(foo);
[x y]=deal(fooCell{:})
x =
88
y =
12
Что сказано в mtrw . По сути, вы хотите использовать сделку с массивом ячеек (хотя сделка (88,12) также работает).
Предполагая, что вы начинаете с массива foo размером n на 2 и хотите присвоить первый столбец x, а второй - y, вы делаете следующее:
foo = [88,12;89,13;90,14];
%# divide the columns of foo into separate cells, i.e. do mat2cell(foo,3,[1,1])
fooCell = mat2cell(foo,size(foo,1),ones(size(foo,2),1));
[x,y] = deal(fooCell{:});
DEAL действительно полезен, и действительно сбивает с толку. Я считаю, что foo
должен быть самим массивом ячеек. Следующее, кажется, работает в Octave, если я правильно помню, оно будет работать и в MATLAB:
> foo = {88, 12}
foo =
{
[1,1] = 88
[1,2] = 12
}
> [x,y] = deal(foo{:})
x = 88
y = 12