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

2024-10-01 07:43:01 发布

您现在位置:Python中文网/ 问答频道 /正文

为了将许多三维点坐标元组存储在努比·恩达雷在为每个特性输入循环之前,我初始化一个空的numpy数组。在

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

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

但这会导致数组几乎为空:

^{pr2}$

在之后的循环中填充pointsarray时,我会执行以下操作:

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

(它也适用于np.追加)在

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

这没什么大不了的,但我想知道是否有一种更干净的方法来实现一个真的空数组,我的意思是,在没有任何内容的情况下(它显示了1行,我不知道为什么),但是在正确的维度上?在


Tags: importnumpyasnp数组特性arrayempty
2条回答

您需要形状为(0, 3),这样您就有了正确的列数来堆叠,但实际上里面没有数据:

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

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

也许是这个名字让你困惑,但是^{}s documentation解释了发生了什么:

Return a new array of given shape and type, without initializing entries.

因此,它只是不初始化条目(有时它们是随机的有时它们是),而empty只表示条目的值而不是数组的形状。在


但是,通过追加或堆叠来创建数组对性能非常不利。只需将它们收集到一个列表中,然后创建数组:

pointsarray = [np.array(myPoint)]

# ...

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

相关问题 更多 >