Терминология: Python и Numpy - `iterable` versus` array_like`
В чем разница между объектами iterable
и array_like
в программах Python, которые используют Numpy
?
Оба iterable
и array_like
часто встречаются в документации Python, и они обладают некоторыми аналогичными свойствами.
Я понимаю, что в этом контексте объект array_like
должен поддерживать операции типа Numpy
типа вещания, однако область Numpy
массивов также является итерабельной. Правильно ли говорить, что array_like
является расширением (или супер-множеством?) iterable
?
Ответы
Ответ 1
Термин "array-like" действительно используется только в NumPy и относится ко всему, что может быть передано как первый параметр в numpy.array()
для создания массива.
Термин "iterable" является стандартной терминологией python и ссылается на все, что можно повторить (например, используя for x in iterable
).
Большинство объектов, подобных массиву, являются итерабельными, за исключением скалярных типов.
Многие итерации не похожи на массивы - например, вы не можете построить массив NumPy из выражения генератора, используя numpy.array()
. (Вместо этого вы должны использовать numpy.fromiter()
. Тем не менее выражение генератора не является "подобным массиву" в терминологии документации NumPy.)
Ответ 2
В то время как первая часть ответа Свена верна, я хотел бы добавить, что объекты, подобные массиву, не обязательно должны быть итерабельными.
Например, в моей конкретной ситуации мне было интересно использовать функцию numpy.rint()
, которая принимает объекты типа массива со скалярами типа int
. Они не повторяются, но они принимаются. Вы также можете передать int
в numpy.array()
, поэтому они похожи на массив.
Вот подтверждение из списка рассылки "NumPy-Discussion": https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html