Множественное левостороннее частичное присвоение в Matlab

Рассмотрим следующую матрицу:

a=[1,2,3]

следовательно

size(a)=[1,3]

Я хочу присвоить второе измерение 3 переменной n. Какой самый эффективный способ?

Почему не работает следующее?

[[],n]=size(a)

or

  n= num2cell(size(a)){2}

person godblessfq    schedule 15.08.2013    source источник
comment
Кажется, самый аккуратный способ - использовать временную переменную. stackoverflow.com/questions/3627107/   -  person godblessfq    schedule 16.08.2013


Ответы (1)


Это, вероятно, самое простое и работает для a с любым количеством измерений:

n = size(a,2);

Если a гарантированно имеет ровно 2 измерения, вы также можете использовать

[ m, n ] = size(a);

и если вам не нужна первая переменная, в последних версиях Matlab вы можете написать

[ ~, n ] = size(a);

Что касается того, что вы пробовали:

  • [[],n]=size(a) не работает, потому что [] не является переменной, которой можно что-либо присвоить.

  • n= num2cell(size(a)){2} не работает, потому что вы не можете напрямую индексировать в Matlab. Вам понадобится временная переменная: temp = num2cell(size(a)); n=temp{2}. Или утилизируйте num2cell и выполните: temp = size(a); n=temp(2).

person Luis Mendo    schedule 15.08.2013
comment
Первый код правильный. Осторожнее с остальными, size вернет произведение оставшихся измерений, если вы не укажете достаточное количество выходных переменных; пример: x = rand(5,4,3,2); [~,n] = size(x); (n будет равно 4*3*2) - person Amro; 16.08.2013
comment
если вы не знаете количество измерений, другой способ: [~,n,~] = size(x) это будет работать, даже если ndims(x)==2. Конечно, size(x,2) по-прежнему предпочтительнее. - person Amro; 16.08.2013
comment
Кроме того, ~ не работает для более старых версий Matlab. Конкретно R2009a на моем ноутбуке, не уверен насчет других ревизий. - person Justin; 16.08.2013