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


问题内容

我有一个列表,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')

问题答案:

为什么不使用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)

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