Как я делаю уроки в MATLAB?

Вот пример того, что я ищу:

>> 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, если я хочу иметь дело с ними отдельно?

44
задан gnovice 30 April 2010 в 02:09
поделиться

3 ответа

Вам вообще не нужен 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
43
ответ дан 26 November 2019 в 22:08
поделиться

Что сказано в 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{:});
4
ответ дан 26 November 2019 в 22:08
поделиться

DEAL действительно полезен, и действительно сбивает с толку. Я считаю, что foo должен быть самим массивом ячеек. Следующее, кажется, работает в Octave, если я правильно помню, оно будет работать и в MATLAB:

> foo = {88, 12}
foo =

{
  [1,1] =  88
  [1,2] =  12
}

> [x,y] = deal(foo{:})
x =  88
y =  12
1
ответ дан 26 November 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: