Разница между функциями numel и length в MATLAB

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

EDIT: просто для прикола:

alt text

похоже, что они одинаковы по производительности, пока вы не доберетесь до 100k элементов.

3 ответов


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


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

  • numel(M) эквивалентно prod(size(M)).
  • length(M) эквивалентно max(size(M)). Если M пусто (т. е. любое измерение равно 0), тогда length(M) - Это 0.

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

IMHO с точки зрения читаемости кода length следует использовать для одномерных массивов. Речь идет о "преднамеренное Программирование", вы видите код и понимаете, что имел в виду программист, когда задумывал свою работу. Поэтому, когда я вижу numel Я знаю, что он используется на матрицу.

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