【问题标题】:Numpy append to an empty arrayNumpy追加到一个空数组
【发布时间】:2014-11-28 08:57:58
【问题描述】:

第一种情况:

>>> import numpy as np
>>> x=np.array(0)
>>> x=np.append(x,1)
>>> x
array([0, 1])

x 包含 2 个元素。为什么会这样?!

第二种情况:

>>> x=np.array([])
>>> x=np.append(x,1)
>>> x
array([ 1.])

x 包含 1 个元素,正如预期的那样。

np.array(0)np.array([]) 有什么区别?

【问题讨论】:

  • np.array(0) 是一个包含 0 的数组。而 np.array([]) 是一个不包含任何内容的空数组。
  • 真正的教训是在两次评估之间检查你的结果,这很明显。

标签: python arrays numpy


【解决方案1】:

在第一种情况下,您正在创建一个名为x 的数组,其中包含一个值,即0

在第二种情况下,您正在创建一个名为 x 的空数组,该数组不包含任何值,但仍然是一个数组。

第一个案例

因此,当您附加 x = np.append(x,1) 时,值 1 会附加到您的数组(已包含 0)即它现在包含 0 和 1

第二种情况

由于您在空数组中没有值,因此当您附加 x=np.append(x,1) 时,附加值 1 并且 x 的长度变为 1(即它现在只包含 1

附:我相信您可能认为用0 调用x = np.array(0) 会使它成为一个空数组,但它不会!在 Python 中,0 仍被视为一个数字并附加到数组中。

【讨论】:

  • 你确定第一种情况是创建一个单项数组吗? x.shape 是 ()。
  • @dplamp 是的,你是对的。但正如我的回答中提到的,当你创建x = np.array(0) 时,你正在创建x,其值为0。因此,无论您要进一步附加到x,都将包含0 以及附加值
  • 我认为这并不完全正确。我的错误是 array() 将类似数组的对象作为其第一个参数,而我的“第一种情况”并非如此。然而,它默默地接受了它,这导致了一种奇怪的行为。很难承认一个 C++ 家伙...
  • @dplamp 这是预期的行为。 array(0) 是“零维”数组,而array([0]) 是一维数组。
  • @dplamp x = np.array(0) 创建一个 标量,它仍然是一个 array(因此,type(x) 将返回 numpy.ndarray),但它是空的。一般来说,标量与一维数组的整个处理在 numpy 中似乎有点混乱。查看docsthis 答案以获得更多见解。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2013-11-07
  • 1970-01-01
  • 2015-02-21
  • 2021-07-14
  • 1970-01-01
  • 2016-08-19
  • 2017-07-22
相关资源
最近更新 更多