python – 将numpy列表数组转换为numpy数组
发布时间:2020-12-20 11:55:26 所属栏目:Python 来源:网络整理
导读:我有一些数据存储为dtype = object的numpy数组,我想提取一列列表并将其转换为numpy数组.这似乎是一个简单的问题,但我发现解决它的唯一方法是将整个事物重新编写为列表列表,然后将其重新设置为numpy数组.有更多的 pythonic方法吗? import numpy as nparr = n
我有一些数据存储为dtype = object的numpy数组,我想提取一列列表并将其转换为numpy数组.这似乎是一个简单的问题,但我发现解决它的唯一方法是将整个事物重新编写为列表列表,然后将其重新设置为numpy数组.有更多的
pythonic方法吗?
import numpy as np arr = np.array([[1,['a','b','c']],[2,'c']]],dtype=object) arr = arr[:,1] print(arr) # [['a','c'] ['a','c']] type(arr) # numpy.ndarray type(arr[0]) # list arr.shape # (2,) 将数组重新铸造为dtype = str会引发ValueError,因为它试图将每个列表转换为字符串. arr.astype(str) # ValueError: setting an array element with a sequence 可以将整个数组重建为列表列表,然后将其转换为numpy数组,但这似乎是一种迂回的方式. arr_2 = np.array(list(arr)) type(arr_2) # numpy.ndarray type(arr_2[0]) # numpy.ndarray arr_2.shape # (2,3) 有一个更好的方法吗? 解决方法
虽然通过列表的方式比通过vstack更快:
In [1617]: timeit np.array(arr[:,1].tolist()) ... 100000 loops,best of 3: 11.5 μs per loop In [1618]: timeit np.vstack(arr[:,1]) ... 10000 loops,best of 3: 54.1 μs per loop vstack正在做: np.concatenate([np.atleast_2d(a) for a in arr[:,1]],axis=0) 一些替代品: In [1627]: timeit np.array([a for a in arr[:,1]]) 100000 loops,best of 3: 18.6 μs per loop In [1629]: timeit np.stack(arr[:,1],axis=0) 10000 loops,best of 3: 60.2 μs per loop 请记住,对象数组只包含指向内存中其他位置的列表的指针.虽然arr的2d特性使得选择第2列变得容易,但arr [:,1]实际上是列表的列表.大多数操作都是这样处理的.像重塑这样的东西不会越过那个对象边界. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |