Различие между numel MATLAB и функциями длины

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

Править: Только для ударов:

alt text

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

39
задан Jonas Stein 2 April 2017 в 16:05
поделиться

3 ответа

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

18
ответ дан 27 November 2019 в 02:48
поделиться

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

  • numel (M) эквивалентно prod (size (M)) .
  • длина (M) эквивалентна макс (размер (M)) . Если M пусто (т. Е. Любое измерение равно 0), тогда длина (M) равна 0.
19
ответ дан 27 November 2019 в 02:48
поделиться

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

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

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

10
ответ дан 27 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

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