术语:Python和Numpy - "iterable"与"array_like"

dtl*_*ier 21 python numpy

Python程序中的一个iterable和一个array_like对象有什么区别Numpy

双方iterablearray_like经常看到的Python文档和他们分享一些相似的性质.

我知道在这种情况下,array_like对象应该支持Numpy类型操作,如广播,但是Numpy数组区域也是可迭代的.说这array_like是一个扩展(或超集?)是正确的iterable吗?

Sve*_*ach 24

术语"类似数组"实际上仅在NumPy中使用,并且指的是可以作为第一个参数传递numpy.array()以创建数组的任何内容.

术语"可迭代"是标准的python术语,指的是可以迭代的任何东西(例如使用for x in iterable).

除标量类型外,大多数类似数组的对象都是可迭代的.

许多迭代不像数组一样 - 例如,您无法使用生成器表达式构造NumPy数组numpy.array().(你必须使用它numpy.fromiter().但是,在NumPy文档的术语中,生成器表达式不是"类似数组".)


wom*_*ire 5

虽然 Sven 答案的第一部分是正确的,但我想补充一点,类数组对象不一定是可迭代的。

例如,在我的特定情况下,我对使用numpy.rint()接受类型为标量的类数组对象的函数感兴趣int。它们不是可迭代的,但它们被接受。您也可以通过ints到numpy.array(),所以他们阵列等。

以下是来自“NumPy-Discussion”邮件列表的确认:https : //mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html