用dtypes列构造一个numpy数组

问题描述 投票:0回答:1

所以我真的放弃了。。我想用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_dtypearr不同,只是每列有其他dtype。有人可以指引方向吗?看来我正在创建尺寸过大的数组。]

python-3.x numpy multidimensional-array numpy-ndarray
1个回答
0
投票

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.]]
© www.soinside.com 2019 - 2024. All rights reserved.