【发布时间】:2017-03-08 02:59:23
【问题描述】:
我有一些数据存储为带有dtype=object 的 numpy 数组,我想提取一列列表并将其转换为 numpy 数组。这似乎是一个简单的问题,但我发现解决它的唯一方法是将整个事物重铸为列表列表,然后将其重铸为 numpy 数组。有没有更 Pythonic 的方法?
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,因为它试图将每个列表转换为字符串。
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)
有没有更好的方法来做到这一点?
【问题讨论】:
-
对象数组只不过是一个美化(或贬低)的列表。数组的元素是指向这些列表对象的指针。这种数组上的大多数操作都涉及列表迭代。
标签: python arrays numpy type-conversion