Рассмотрим следующую матрицу:
a=[1,2,3]
следовательно
size(a)=[1,3]
Я хочу присвоить второе измерение 3 переменной n. Какой самый эффективный способ?
Почему не работает следующее?
[[],n]=size(a)
or
n= num2cell(size(a)){2}
Рассмотрим следующую матрицу:
a=[1,2,3]
следовательно
size(a)=[1,3]
Я хочу присвоить второе измерение 3 переменной n. Какой самый эффективный способ?
Почему не работает следующее?
[[],n]=size(a)
or
n= num2cell(size(a)){2}
Это, вероятно, самое простое и работает для 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)
.
size
вернет произведение оставшихся измерений, если вы не укажете достаточное количество выходных переменных; пример: x = rand(5,4,3,2); [~,n] = size(x);
(n
будет равно 4*3*2)
- person Amro; 16.08.2013
[~,n,~] = size(x)
это будет работать, даже если ndims(x)==2
. Конечно, size(x,2)
по-прежнему предпочтительнее.
- person Amro; 16.08.2013
~
не работает для более старых версий Matlab. Конкретно R2009a на моем ноутбуке, не уверен насчет других ревизий.
- person Justin; 16.08.2013