我有一个名为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') 发布于 2015-06-09 19:26:51
为什么不使用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)备注--这是关于内存使用的问题,当您指定每个列的d类型时,分配给ndarray的内存将比使用dtype=object时少,因为dtype=object包含了python中所有可能的类型,因此为每个列分配的内存将是最大的。
发布于 2015-06-09 19:01:43
嵌套项应该是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')])据了解,由于numpy使用元组来保留其类型,当您对数组项使用多个类型时,需要将您的子数组转换为象dtype元素那样的元组。
https://stackoverflow.com/questions/30740490
复制相似问题