Numpy dtype用于具有混合数据类型的列表

pir*_*pir 7 python numpy

我有一个列表,my_list混合数据类型,我想转换成一个numpy数组.但是,我得到了错误TypeError: expected a readable buffer object.见下面的代码.我试图将我的代码基于 NumPy文档.

my_list = [['User_0', '2012-2', 1, 6, 0, 1.0], ['User_0', '2012-2', 5, 6, 0, 1.0], ['User_0', '2012-3', 0, 0, 4, 1.0]]
my_np_array = np.array(my_list, dtype='S30, S8, i4, i4, f32')   
Run Code Online (Sandbox Code Playgroud)

far*_*awa 12

为什么不用dtype=object

In [1]: my_list = [['User_0', '2012-2', 1, 6, 0, 1.0], ['User_0', '2012-2', 5,
6, 0, 1.0], ['User_0', '2012-3', 0, 0, 4, 1.0]]
In [2]: my_np_array = np.array(my_list, dtype=object)
In [3]: my_np_array
Out[3]:
array([['User_0', '2012-2', 1, 6, 0, 1.0],
       ['User_0', '2012-2', 5, 6, 0, 1.0],
       ['User_0', '2012-3', 0, 0, 4, 1.0]], dtype=object)
Run Code Online (Sandbox Code Playgroud)

注意 它是关于内存使用情况,当你指定每列的dtype时,分配给你的内存ndarray将少于你使用时dtype=object包含python中所有可能类型的内存,因此为每列分配的内存将是最大的.


Kas*_*mvd 5

您的嵌套项tuple也应该i4在类型中省略一个:

>>> my_np_array = np.array(map(tuple,my_list), dtype='|S30, |S8, i4, i4, i4, f32')  
>>> my_np_array
array([('User_0', '2012-2', 1, 6, 0, 1.0),
       ('User_0', '2012-2', 5, 6, 0, 1.0),
       ('User_0', '2012-3', 0, 0, 4, 1.0)], 
      dtype=[('f0', 'S30'), ('f1', 'S8'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<f4')])
Run Code Online (Sandbox Code Playgroud)

据我所知,当你使用多个类型的数组项时,numpy使用元组来保留它的类型,你需要将子数组转换为类似元组的元组dtype.