numpy.empty函数生成了一个非空数组

6
当我使用foo = np.empty(1)创建一个空的numpy数组时,结果数组包含一个float64类型的元素:
>>> foo = np.empty(1)
>>> foo
array([ 0.])
>>> type(foo[0])
<type 'numpy.float64'>

为什么它不直接返回array([])

3
你指定了尺寸1。 - Ghilas BELHADJ
2
np.empty()与列表[]不同。它需要一个你提供的参数。看起来你想要一个0大小的数组。但是为什么?这很少有用。请参见https://stackoverflow.com/questions/44872454/appending-successive-rows-to-python-dataframe - hpaulj
@GhilasBELHADJ np.empty() 的第一个输入是形状。按照我的理解,如果我说 np.empty(2),我期望得到的是 array([[]]),那么我使用的代码不应该只生成一个维度为1的空数组吗?我该如何做到这一点? - G Warner
@GWarner。这将是一个二维的空数组,而不是一维的。此外,形状并不等同于维度。数组 [1][1, 2][1, 2, 3] 都是一维的,但它们的形状不同。 - BrenBarn
“empty” 可能不是这个函数最好的名称,因为 “空列表” 有着非常不同的含义。使用 np.zerosnp.ones 可能会更合适。 - hpaulj
3个回答

18

您没有阅读文档,文档中写道:

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

empty与创建一个在元素上“空”的数组无关。它只是意味着该数组的值未初始化(即,它们是不可预测的,并且取决于为数组分配的内存中存在什么)。


好的,谢谢。我正在尝试创建一个空矩阵,以便可以添加维度。传统的Python数组比NumPy更适合这个吗? - G Warner
1
@GWarner:可能是这样,但最好的方法取决于你具体在做什么。向numpy数组添加维度(或元素)是一种低效的操作。Numpy数组通过使用固定的内存布局来实现其速度,因此类似于“list.append”的操作需要创建一个全新的数组。由于这个原因,numpy数组不适用于需要动态改变大小的任务。 - BrenBarn

2
foo = np.empty(0) 

这是你需要的东西

你在指定它的大小时设置为1,根据评论中所说,你需要将其设置为0


0
如果您想要一个维度为N,大小为0的数组,可以使用 np.empty((0,)*N)
>>> np.empty((0,)*1)
array([], dtype=float64)
>>> np.empty((0,)*2)
array([], shape=(0, 0), dtype=float64)

当然,如果数组 .size == 0,那么 emptyzeros 是相同的。

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