为了在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)
我最后需要在退出循环后删除数组的第一行行,因为第一行总是包含初始化步骤中的值!
这不是什么大问题,但我想知道是否有一种更清洁的方法来实现真正空阵列,我的意思是;里面什么都没有(它显示了一行,我无法弄清楚为什么)但是尺寸合适?
答案 0 :(得分:7)
您需要将形状设置为(0, 3)
,这样您才能拥有正确的列数,但实际上没有数据:
import numpy as np
pointsarrray = np.empty((0,3))
pointsarrray
# array([], shape=(0, 3), dtype=float64)
答案 1 :(得分:2)
也许这个名字令你感到困惑,但numpy.empty
s documentation解释了发生的事情:
返回给定形状和类型的新数组,而不初始化条目。
所以它只是没有初始化条目(有时它们随机有时它们零)但空白仅指条目的值而不是形状数组。
然而,通过追加或堆叠来创建阵列对于性能来说真的很糟糕。只需在列表中收集它们并在之后创建数组:
pointsarray = [np.array(myPoint)]
# ...
pointsarray = np.array(pointsarray) # or np.stack(pointsarray, axis=...) whatever you need.