首页 > 解决方案 > 如何加载某些列作为特定类型的numpy数组

问题描述

我试过以下:

>>> arr2 = [[0, 0, 0, -0.9, 0.3], [0, 0, 1, 0.9, 0.6], [0, 1, 0, -0.2, 0.6], [0, 1, 1, 0.8, 0.3], [1, 0, 1, 0.2, 1.0], [1, 1, 0, -0.8, 1.0]]
>>> narr2 = np.array(arr2)
>>> narr2
array([[ 0. ,  0. ,  0. , -0.9,  0.3],
       [ 0. ,  0. ,  1. ,  0.9,  0.6],
       [ 0. ,  1. ,  0. , -0.2,  0.6],
       [ 0. ,  1. ,  1. ,  0.8,  0.3],
       [ 1. ,  0. ,  1. ,  0.2,  1. ],
       [ 1. ,  1. ,  0. , -0.8,  1. ]])

如何使前三列具有类型int?这就是我如何获得以下信息:

>>> narr2
array([[ 0 ,  0 ,  0 , -0.9,  0.3],
       [ 0 ,  0 ,  1 ,  0.9,  0.6],
       [ 0 ,  1 ,  0 , -0.2,  0.6],
       [ 0 ,  1 ,  1 ,  0.8,  0.3],
       [ 1 ,  0 ,  1 ,  0.2,  1. ],
       [ 1 ,  1 ,  0 , -0.8,  1. ]])

我试过以下:

>>> narr2 = np.array(arr2,dtype='i4,i4,i4,f8,f8')
>>> narr2
array([[(0, 0, 0,  0. ,  0. ), (0, 0, 0,  0. ,  0. ),
        (0, 0, 0,  0. ,  0. ), (0, 0, 0, -0.9, -0.9),
        (0, 0, 0,  0.3,  0.3)],
       [(0, 0, 0,  0. ,  0. ), (0, 0, 0,  0. ,  0. ),
        (1, 1, 1,  1. ,  1. ), (0, 0, 0,  0.9,  0.9),
        (0, 0, 0,  0.6,  0.6)],
       [(0, 0, 0,  0. ,  0. ), (1, 1, 1,  1. ,  1. ),
        (0, 0, 0,  0. ,  0. ), (0, 0, 0, -0.2, -0.2),
        (0, 0, 0,  0.6,  0.6)],
       [(0, 0, 0,  0. ,  0. ), (1, 1, 1,  1. ,  1. ),
        (1, 1, 1,  1. ,  1. ), (0, 0, 0,  0.8,  0.8),
        (0, 0, 0,  0.3,  0.3)],
       [(1, 1, 1,  1. ,  1. ), (0, 0, 0,  0. ,  0. ),
        (1, 1, 1,  1. ,  1. ), (0, 0, 0,  0.2,  0.2),
        (1, 1, 1,  1. ,  1. )],
       [(1, 1, 1,  1. ,  1. ), (1, 1, 1,  1. ,  1. ),
        (0, 0, 0,  0. ,  0. ), (0, 0, 0, -0.8, -0.8),
        (1, 1, 1,  1. ,  1. )]],
      dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<f8'), ('f4', '<f8')])

可以看出,我没有得到想要的输出。似乎我不明白如何在创建数组时指定类型以及哪里出错了。

标签: pythonarraysnumpy

解决方案


我建议您将列表转换为元组,然后分配数据类型。这是我的解决方案:

import numpy as np

arr2 = [[0, 0, 0, -0.9, 0.3], [0, 0, 1, 0.9, 0.6], 
[0, 1, 0, -0.2, 0.6], [0, 1, 1, 0.8, 0.3], [1, 0, 1, 0.2, 1.0], [1, 1, 0, -0.8, 1.0]]

tupp2 = [tuple(l) for l in arr2]

datatype = [('A', np.int), ('B', np.int), ('C', np.int), ('D', np.float), ('E', np.float)]
narr2 = np.array(tupp2, dtype=datatype)

检查每列的数据类型:

for i in narr2[0]:
    print(i.dtype)

给出:

int32
int32
int32
float64
float64

推荐阅读