Подтвердить что ты не робот

Терминология: Python и Numpy - `iterable` versus` array_like`

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

Оба iterable и array_like часто встречаются в документации Python, и они обладают некоторыми аналогичными свойствами.

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

4b9b3361

Ответ 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