所以我真的放弃了。。我想用shape(10000000,3)
预先分配一个巨大的2d-numpy array,每列一个特定的dtype
。
示例:
a b c
-------- --------- --------
unit32 float32 unit8
------ ------ ------
90 2.43 4
100 2.42 2
123 2.33 1
所以from the docs我可以创建一个二维数组,如下所示:
arr = np.zeros((4,3))
arr
Out[6]:
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
到目前为止还不错,但是dtypes呢?
In [16]: arr.dtype
Out[16]: dtype('float64')
全部浮动-因此让我们定义dtype
:
dtype_L1 = np.dtype({'names': ['a', 'b', 'c'],
'formats': [np.uint32, np.float32, np.unit8]})
并比较两者:
In [25]: arr_dtype = np.zeros((4,3), dtype=dtype_L1)
In [26]: arr = np.zeros((4,3))
In [27]: arr[0,0]
Out[27]: 0.0
In [28]: arr_dtype[0,0]
Out[28]: (0, 0., 0)
In [29]: type(arr_dtype[0,0])
Out[29]: numpy.void
In [30]: type(arr[0,0])
Out[30]: numpy.float64
In [31]: arr.shape
Out[31]: (4, 3)
In [32]: arr_dtype.shape
Out[32]: (4, 3)
所以-我不明白,为什么arr_dtype
与arr
不同,只是每列有其他dtype
。有人可以指引方向吗?看来我正在创建尺寸过大的数组。]
arr_dtype
是一个结构化的数组,具有可以向其分配不同数据类型的字段。结构化数组的每个元素都是一个元组,并且该元组的元素可以具有不同的数据类型。另一方面,arr
是一个非结构化数组,所有元素都具有相同的数据类型。非结构化数组的每个元素都是一个对象(在这种情况下为数字)。
检查您的输出以查看区别:
arr_dtype
[[(0, 0., 0) (0, 0., 0) (0, 0., 0)]
[(0, 0., 0) (0, 0., 0) (0, 0., 0)]
[(0, 0., 0) (0, 0., 0) (0, 0., 0)]
[(0, 0., 0) (0, 0., 0) (0, 0., 0)]]
arr
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]