我有一些数据存储为带有dtype=object
的numpy数组,我想提取一列列表并将其转换为numpy数组。这看起来是一个简单的问题,但是我找到的唯一解决方法是将整个事情重新转换为一个列表列表,然后将其重新转换为numpy数组。有没有更像Python的方法?在
import numpy as np
arr = np.array([[1, ['a', 'b', 'c']], [2, ['a', 'b', 'c']]], dtype=object)
arr = arr[:, 1]
print(arr)
# [['a', 'b', 'c'] ['a', 'b', 'c']]
type(arr)
# numpy.ndarray
type(arr[0])
# list
arr.shape
# (2,)
将数组重铸为dtype=str
会引发一个ValueError
,因为它正在尝试将每个列表转换为字符串。在
可以将整个数组重建为列表列表,然后将其转换为numpy数组,但这似乎是一种迂回的方式。在
arr_2 = np.array(list(arr))
type(arr_2)
# numpy.ndarray
type(arr_2[0])
# numpy.ndarray
arr_2.shape
# (2, 3)
有更好的方法吗?在
一种方法是使用类似^{} -
样本运行-
^{pr2}$我相信} 。所以,要直接使用它,我们必须-
np.vstack
会在内部使用^{虽然通过列表的方式比通过
vstack
的方式更快:
^{pr2}$vstack
正在执行以下操作:一些备选方案:
请记住,对象数组只包含指向列表的指针,这些指针位于内存中的其他位置。虽然
arr
的2d特性使得选择第二列变得容易,但是arr[:,1]
实际上是一个列表列表。大部分的手术都是这样处理的。像reshape
这样的东西不会越过object
边界。在相关问题 更多 >
编程相关推荐