初始化的空numpy数组实际上不是空的(包含零)

时间:2017-06-07 20:07:57

标签: python arrays numpy

为了在numpy.ndarray中存储许多3D点坐标元组,我在为每个特征输入一个循环之前初始化一个空的numpy数组。

为此,我目前在进入循环之前执行此操作:

import numpy as np
pointsarrray = np.empty((1,3))

但这会产生一个几乎为空的数组:

array([[  5.30498948e-315,   0.00000000e+000,   7.81250000e-003]])

在我的循环中填充pointsarray后,我这样做:

pointsarray = np.vstack((pointsarray, [np.array(myPoint)]))

(它也适用于np.append)

我最后需要在退出循环后删除数组的第一行行,因为第一行总是包含初始化步骤中的值!

这不是什么大问题,但我想知道是否有一种更清洁的方法来实现真正空阵列,我的意思是;里面什么都没有(它显示了一行,我无法弄清楚为什么)但是尺寸合适?

2 个答案:

答案 0 :(得分:7)

您需要将形状设置为(0, 3),这样您才能拥有正确的列数,但实际上没有数据:

import numpy as np
pointsarrray = np.empty((0,3))

pointsarrray
# array([], shape=(0, 3), dtype=float64)

答案 1 :(得分:2)

也许这个名字令你感到困惑,但numpy.emptys documentation解释了发生的事情:

  

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

所以它只是没有初始化条目(有时它们随机有时它们)但空白仅指条目的值而不是形状数组。

然而,通过追加或堆叠来创建阵列对于性能来说真的很糟糕。只需在列表中收集它们并在之后创建数组:

pointsarray = [np.array(myPoint)]

# ...

pointsarray = np.array(pointsarray)  # or np.stack(pointsarray, axis=...) whatever you need.