Разница между функциями чисел и длины в MATLAB - PullRequest
39 голосов
/ 25 июня 2010

Я знаю, что length(x) возвращает max(size(x)), а numel(x) возвращает общее количество элементов x, но что лучше для массива 1 на n? Имеет ли это значение или взаимозаменяемы в этом случае?

РЕДАКТИРОВАТЬ: Только для ударов:

alt text

Похоже, они одинаковы по производительности, пока не дойдете до 100 тыс. Элементов.

Ответы [ 3 ]

19 голосов
/ 25 июня 2010

Для массива 1 на N они, по сути, одинаковы.Для многомерного массива M они могут давать разные результаты:

  • numel(M) эквивалентно prod(size(M)).
  • length(M) эквивалентно max(size(M)).Если M пусто (т. Е. Любое измерение равно 0), то length(M) равно 0.
18 голосов
/ 25 июня 2010

В этом случае они возвращают то же самое, и нет никакой разницы. С точки зрения производительности это зависит от внутренней работы массивов в MATLAB. Например. если есть метаинформация о том, сколько элементов в массиве (независимо от формы), то цифра работает максимально быстро, в то время как max (size (x)), похоже, требуется больше работы для получения того же самого (получение размеров и затем найти максимум среди тех). Я привык использовать numel в этом случае, но речь о производительности (гипотетическая) отдельно, я бы сказал, что они взаимозаменяемы.

9 голосов
/ 25 июня 2010

Как уже говорилось, они одинаковы для одномерного массива.

ИМХО с точки зрения читабельности кода length следует использовать для одномерных массивов.Речь идет о «преднамеренном программировании» , вы видите код и понимаете, что имел в виду программист, когда задумывал свою работу.Поэтому, когда я вижу numel, я знаю, что он используется в матрице.

length против numel был темой для обсуждения в нашей команде в течение ряда лет.Бывший старший разработчик не заботился о надежности кода, только о проделанной работе и использовал только numel в не очень хорошо читаемом / отформатированном коде.Другой парень - математик и использовал length только для числовых массивов, являющихся для него "настоящими" массивами.Для массивов ячеек и структурных массивов он использовал numel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...