【问题标题】:Why does an empty numpy array have a shape and what does it mean?为什么一个空的 numpy 数组有一个形状,这是什么意思?
【发布时间】:2020-06-07 05:11:17
【问题描述】:

如果我像这样初始化 numpy 数组:

data = np.empty((413, 0), dtype=float)

它有一个形状,但它是“空的”。

在这种情况下为空是什么意思?它是否充满了np.nan,如果是,为什么现在显示np.nan?如果没有,里面是什么?它只分配内存吗?

另外,我如何检查它是否为空?显然.shape 不起作用。但它是空的......

有人可以澄清一下这个概念吗?

【问题讨论】:

  • 您想知道的一件事是数组的元素是什么样的。你认为这个数组有多少 个元素?
  • 请注意,np.empty 与将其中一个维度长度设置为 0(您也这样做过)所获得的“空”感完全不同。
  • 我不知道它有多少元素。我猜是 0。
  • 我删除了duplicate,因为它是pytorch 答案,而不是numpy(相关但不相同)。这个也有大小为0的复杂性。
  • 您无法确定数组是否由np.empty 创建,因此不需要。只需阅读代码。此外,大小为 0(一维为 0)时,没有任何要检查的元素,所以不管它是如何创建的。 zerosones 将创建一个相同的数组。

标签: python numpy


【解决方案1】:

numpy.empty 并没有真正创建一个空数组。它创建了一个带有未初始化数据缓冲区的数组——数组的元素是该内存中发生的任意垃圾。这不是随机的 - 它通常是全零,或者是最近释放的数组的内容,或者来自其他一些最近释放的对象的(潜在敏感的)数据。一个元素甚至可以是一个信号 NaN,如果您尝试对其进行任何操作,它可能会使您的程序崩溃。

没有办法对此进行测试。


您还指定了长度为零的维度。这使得你的数组真的是空的,因为它没有元素。您可以使用arr.size == 0 进行测试。

【讨论】:

    【解决方案2】:

    根据documentation

    返回给定形状和类型的新数组,而不初始化条目。

    emptyzeros 不同,它不会将数组值设置为零,因此可能会稍微快一些。另一方面,它需要用户手动设置数组中的所有值,应谨慎使用。

    如果您打算写入所有值,它可能是zeros 的替代方案。

    【讨论】:

    • 谢谢,它是 np.nan 吗?如何检查它是否为空数组?
    • @Newskooler:你不能假设元素是 nan。他们通常不是。
    【解决方案3】:

    Numpy 文档说该数组将使用任意值进行初始化。是的,将为条目分配内存。

    https://numpy.org/doc/1.18/reference/generated/numpy.empty.html

    【讨论】:

    • 我从文档中看到这是因为我将列设置为0,我什么也没看到。如果我将列值设置为不同于 0 的值,我会看到随机值...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多