如何在numpy中将python列表转换为另一种数据类型?

kd3sttzy  于 2023-02-16  发布在  Python
关注(0)|答案(1)|浏览(145)

编写一个函数,根据现有列表创建一个float64类型的numpy数组

import numpy as np

def solution(lst):
    arr = #your code here
    return arr

我尝试了很多方法:
将numpy导入为np

def solution(lst): 
   arr = np.array(lst) 
   arr = lst.astype(np.float64) 
return arr

import numpy as np 
def solution(lst): 
   arr = np.array(lst) 
   arr = np.astype(np.float64) 
return arr
roejwanj

roejwanj1#

一个好的问题应该有一个最小的测试用例,并显示您在各种尝试中得到的错误。
定义一个小列表:

In [15]: lst = [1,2,3]

以及您的两次尝试(注意return的正确缩进):

In [18]: def solution1(lst): 
    ...:    arr = np.array(lst) 
    ...:    arr = lst.astype(np.float64) 
    ...:    return arr
    ...: def solution2(lst): 
    ...:    arr = np.array(lst) 
    ...:    arr = np.astype(np.float64) 
    ...:    return arr
    ...:

第一次尝试:

In [19]: solution1(lst)
AttributeError: 'list' object has no attribute 'astype'

astype是一个ndarray的方法(如我的评论中的doc链接所示)。list没有这样的方法。在python中,每个类都有一个定义的methods集合。仅仅因为一个类有这样的方法,并不意味着另一个类也有同样的方法。
对于第二个:

In [21]: solution2(lst)
AttributeError: module 'numpy' has no attribute 'astype'
    
In [22]: np.astype
AttributeError: module 'numpy' has no attribute 'astype'

你又创建了一个arr,但是你尝试使用astype作为np函数,你根本没有在那一行中指定arr
从列表中创建数组:

In [23]: np.array(lst)
Out[23]: array([1, 2, 3])

在此列表中,数据类型为int:

In [24]: np.array(lst).dtype
Out[24]: dtype('int32')

生成的数组具有astype方法:

In [25]: np.array(lst).astype(np.float64)
Out[25]: array([1., 2., 3.])

但是np.array也接受dtype参数:

In [26]: np.array(lst,dtype=np.float64)
Out[26]: array([1., 2., 3.])

如果你的列表包含浮点数,你不需要任何进一步的转换:

In [27]: np.array([1,2,.3])
Out[27]: array([1. , 2. , 0.3])

In [28]: np.array([1,2,.3]).dtype
Out[28]: dtype('float64')

换句话说,你应该简单地写:

def solution(lst):
    arr = np.array(lst)
    arr = arr.astype(np.float64)   # arr, not lst or np
    return arr

相关问题