【问题标题】:Terminology: Python and Numpy - `iterable` versus `array_like`术语:Python 和 Numpy - `iterable` 与 `array_like`
【发布时间】:2018-01-20 05:23:26
【问题描述】:

在使用Numpy的Python程序中iterablearray_like对象有什么区别?

iterablearray_like 经常出现在 Python 文档中,它们有一些相似的属性。

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

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    "array-like" 一词确实仅在 NumPy 中使用,它指的是可以作为第一个参数传递给 numpy.array() 以创建数组的任何内容。

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

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

    许多可迭代对象不是类数组——例如,您不能使用 numpy.array() 从生成器表达式构造 NumPy 数组。 (您必须改用numpy.fromiter()。尽管如此,在 NumPy 文档的术语中,生成器表达式并不是“类数组”。)

    【讨论】:

    • 太好了 - 谢谢。这清除了它,尤其是array-likenumpy.array() 的第一个参数之间的链接。
    • “所有类似数组的对象都是可迭代的”——这是不正确的。 int类型的标量值是类数组,可以传递给numpy.array(),但不可迭代。
    • @wombatonfire 是的,这是真的。即使是实际的 0 维数组也无法迭代,而它们显然是“类数组”。它们甚至是数组。
    【解决方案2】:

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

    例如,在我的特定情况下,我有兴趣使用numpy.rint() 函数,该函数接受带有int 类型标量的类数组对象。它们不可迭代,但被接受。您还可以将ints 传递给numpy.array(),因此它们类似于数组。

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

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 2023-01-07
      • 2021-07-17
      • 2010-11-06
      • 1970-01-01
      • 2012-09-24
      • 2018-11-29
      • 2020-06-06
      相关资源
      最近更新 更多