Разница между функциями numel и length в MATLAB
Я знаю, что length(x)
возвращает max(size(x))
и numel(x)
возвращает общее количество элементов x, но что лучше для массива 1 на n? Имеет ли это значение, или они взаимозаменяемы в этом случае?
EDIT: просто для прикола:
похоже, что они одинаковы по производительности, пока вы не доберетесь до 100k элементов.
3 ответов
в этом случае они возвращают одинаковые и нет никакой разницы. С точки зрения производительности это зависит от внутренней работы массивов в MATLAB. Например. если есть метаинформации о том, сколько элементов находится в массиве (независимо от формы), то numel как можно быстрее, в то время как max(size(x)), похоже, требуется больше работы, чтобы получить то же самое (получение размеров, а затем найти max среди них). Я привык использовать numel
в этом случае, но производительность речи (гипотетическая) отдельно, I можно сказать, они взаимозаменяемы.
для массива 1-by-N они по существу одинаковы. Для многомерного массива M
, Они могут дать разные результаты:
как другие сказали, они одинаковы для одномерного массива.
IMHO с точки зрения читаемости кода length
следует использовать для одномерных массивов. Речь идет о "преднамеренное Программирование", вы видите код и понимаете, что имел в виду программист, когда задумывал свою работу. Поэтому, когда я вижу numel
Я знаю, что он используется на матрицу.
length
и numel
была темой обсуждения в нашей команде в течение нескольких лет. Бывший старший разработчик не заботился о доступности кода, только о выполняемой работе и используется только numel
в противном случае не читается/форматируется код. Другой парень-математик и используется length
только на числовых массивах, являющихся для него" реальными " массивами. Для массивов ячеек и массивов структур он использовал numel
.