【问题标题】:Fill a numpy array with the same number? [duplicate]用相同的数字填充一个numpy数组? [复制]
【发布时间】:2012-10-22 22:14:22
【问题描述】:

我知道如何在 100 个元素的数组中填充零:

np.zeros(100)

但是如果我想用 9 填充呢?

【问题讨论】:

    标签: numpy


    【解决方案1】:

    你可以使用:

    a = np.empty(100)
    a.fill(9)
    

    或者如果您更喜欢切片语法:

    a[...] = 9
    

    np.emptynp.ones 等相同,但速度会更快一些,因为它不会初始化数据。

    在较新的 numpy 版本(1.8 或更高版本)中,您还拥有:

    np.full(100, 9)
    

    【讨论】:

    • a[:] = 9。至少对我来说,这更符合习惯。
    • @mtrw 口味问题,我喜欢 Ellipsis,因为它明确表示要接受所有内容。同样对于单例数组的极端情况,它可能意味着没有轴:np.array(5)[...] = 8 有效,np.array(5)[:] = 8 无效。
    • 有趣,我没想过单身问题。谢谢!
    【解决方案2】:

    如果您只想在整个数组中使用相同的值并且不想更改它,您可以通过将其设为零来欺骗步幅。通过这种方式,您只需将内存用于单个值。但是你会得到一个任意大小和形状的虚拟 numpy 数组。

    >>> import numpy as np
    >>> from numpy.lib import stride_tricks
    >>> arr = np.array([10])
    >>> stride_tricks.as_strided(arr, (10, ), (0, ))
    array([10, 10, 10, 10, 10, 10, 10, 10, 10, 10])
    

    但是,请注意,如果您修改任何一个元素,数组中的所有值都会被修改。

    【讨论】:

    • 有趣的把戏。虽然你可能只使用一个标量值而不是一个数组,如果它是永远不会改变的所有相同的值。
    【解决方案3】:

    这个问题之前已经讨论过一些,见NumPy array initialization (fill with identical values),还有哪种方法最快。

    【讨论】:

      【解决方案4】:

      据我所知,没有专门的函数可以用 9 填充数组。所以你应该使用np.empty(100)创建一个空的(即未初始化的)数组,并在循环中用9或其他填充它。

      【讨论】:

      • 是的,但没有循环。使用array.fill(9)array[...] = 9
      • @seberg:你的评论应该是一个答案。
      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多