将一维字符串数组转换为二维浮点数组

2024-06-28 19:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将列表的数据类型转换为float。我知道如何使用for循环转换每个列表的数据类型,但是,我真的不知道如何转换列表中每个项的数据类型,也就是说,我有一个数据类型字符串的数组

array(['5, 0, -150, 0', '6, 0, -10, 0',
       '7, 2.5881904510252, 9.6592582628907, 0',
       '8, 5, 8.6602540378444, 0',
       '9, 7.0710678118655, 7.0710678118655, 0',
       '10, 8.6602540378444, 5, 0'], dtype='<U63')

那么,如何将二维数组构建为浮点数据类型的6x4数组呢?你知道吗


Tags: 数据字符串列表for数组floatarray浮点
2条回答

迭代该数组,在分隔符上拆分这些字符串,然后使它们成为float数据类型。你知道吗

>>> arr2 = np.array([np.array([float(i.strip()) for i in j.split(',') if i]) for j in arr1])
>>> arr2
array([[   5.        ,    0.        , -150.        ,    0.        ],
       [   6.        ,    0.        ,  -10.        ,    0.        ],
       [   7.        ,    2.58819045,    9.65925826,    0.        ],
       [   8.        ,    5.        ,    8.66025404,    0.        ],
       [   9.        ,    7.07106781,    7.07106781,    0.        ],
       [  10.        ,    8.66025404,    5.        ,    0.        ]])
>>> arr2.dtype
dtype('float64')
In [72]: arr = np.array(['5, 0, -150, 0', '6, 0, -10, 0', 
    ...:        '7, 2.5881904510252, 9.6592582628907, 0', 
    ...:        '8, 5, 8.6602540378444, 0', 
    ...:        '9, 7.0710678118655, 7.0710678118655, 0', 
    ...:        '10, 8.6602540378444, 5, 0'], dtype='<U63')                     

其他人提出的列表理解是正确的方法,但可以简化:

In [73]: [line.split(',') for line in arr]                                      
Out[73]: 
[['5', ' 0', ' -150', ' 0'],
 ['6', ' 0', ' -10', ' 0'],
 ['7', ' 2.5881904510252', ' 9.6592582628907', ' 0'],
 ['8', ' 5', ' 8.6602540378444', ' 0'],
 ['9', ' 7.0710678118655', ' 7.0710678118655', ' 0'],
 ['10', ' 8.6602540378444', ' 5', ' 0']]

np.array可以处理嵌套列表,并转换为浮点:

In [74]: np.array(_, dtype=float)                                                     
Out[74]: 
array([[   5.        ,    0.        , -150.        ,    0.        ],
       [   6.        ,    0.        ,  -10.        ,    0.        ],
       [   7.        ,    2.58819045,    9.65925826,    0.        ],
       [   8.        ,    5.        ,    8.66025404,    0.        ],
       [   9.        ,    7.07106781,    7.07106781,    0.        ],
       [  10.        ,    8.66025404,    5.        ,    0.        ]])

原始对象是数组而不是列表这一事实并不能增强这种转换。实际上,在数组上迭代要比在等价列表上迭代慢。你知道吗

相关问题 更多 >