Это довольно мягкий вопрос, но я подозреваю, что понимание этого поможет мне (и, надеюсь, другим) лучше понять философию numpy (я недавно перешел из MATLAB).
Некоторые функции, такие как sum, max, transpose, conjugate и т. д., являются методами класса ndarray, поэтому можно использовать arr.sum(), или arr.sum(axis=1) и т. д.
Однако большинство функций являются функциями модуля numpy, поэтому вам нужно вызывать их как numpy.count_nonzero(arr) или numpy.roll(arr) и т. д. Многие из этих методов принимают только один объект ndarray в качестве входных данных, поэтому с точки зрения дизайна их можно рассматривать как свойства массива сам по себе.
Какова логика такого выбора дизайна?
Подробнее здесь: https://stackoverflow.com/questions/485 ... -functions