Терминология: Python и Numpy - «итерируемый» и «массив_подобный» - PullRequest
21 голосов
/ 21 ноября 2011

В чем разница между iterable и array_like объектом в программах на Python, которые используют Numpy?

И iterable, и array_like часто встречаются в документации по Python, и они имеют некоторые схожие свойства.

Я понимаю, что в этом контексте объект array_like должен поддерживать операции типа Numpy, такие как широковещание, однако Numpy область массивов также может быть повторяемой. Правильно ли говорить, что array_like является расширением (или супер-набором) iterable?

Ответы [ 2 ]

24 голосов
/ 21 ноября 2011

Термин «похожий на массив» действительно используется только в NumPy и относится ко всему, что может быть передано в качестве первого параметра в numpy.array() для создания массива.

Термин "iterable" - это стандартная терминология Python и относится ко всему, что может быть повторено (например, с использованием for x in iterable).

Большинство объектов, подобных массиву, являются итеративными, за исключением скалярноготипы.

Многие итерируемые элементы не похожи на массивы - например, вы не можете создать массив NumPy из выражения генератора, используя numpy.array().(Вместо этого вам придется использовать numpy.fromiter(). Тем не менее, выражение генератора не является «подобным массиву» в терминологии документации NumPy.)

4 голосов
/ 20 ноября 2016

Хотя первая часть ответа Свена верна, я хотел бы добавить, что подобные объектам массивы не обязательно должны быть повторяемыми.

Например, в моей конкретной ситуации мне было интересно использовать numpy.rint() функция, которая принимает массивоподобные объекты со скалярами типа int.Они не повторяемы, но они принимаются.Вы также можете передать int с numpy.array(), чтобы они были массивными.

Вот подтверждение из списка рассылки "NumPy-Discussion": https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html

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