向空数组中添加Numpy数据

5

第一种情况:

>>> 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([])有什么区别?


7
np.array(0)是一个包含0的数组,而np.array([])是一个不包含任何元素的空数组。 - Srivatsan
3
这里需要学习的真正教训是在评估过程中要检查你的结果,这样问题就会显而易见。 - PascalVKooten
1个回答

7

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

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

第一种情况

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

第二种情况

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

P.S. 我认为您可能认为调用 x = np.array(0) 会使其成为空数组,但事实并非如此。在Python中,0仍然被视为数字,并被附加到数组中。


你确定第一个情况创建了一个只有一个元素的数组吗?x.shape 是 ()。 - dpeng
1
@dplamp 是的,你说得对。但是正如我在回答中提到的那样,当你创建 x = np.array(0) 时,你创建了一个值为 0x。因此,无论你将要附加什么到 x 中,都将包含 0 和附加的值。 - Srivatsan
这并不完全正确,我认为。我的错误在于array()将类似数组的对象作为其第一个参数,而这在我的“第一种情况”中并不是这种情况。然而,它会默默地接受它,这导致了后续奇怪的行为。对于一个C++程序员来说很难承认... - dpeng
1
@dplamp 这是预期的行为。array(0) 是一个“零维”数组,而 array([0]) 则是一个一维数组。 - sebix
@dplamp x = np.array(0) 创建了一个标量,它仍然是一个数组(因此,type(x)将返回numpy.ndarray),但其形状为空。在numpy中,标量与一维数组的整个处理似乎有点混乱。请查看文档答案以获得更多见解。 - tttthomasssss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接