我对列表到数组的转换有疑问。我有一个来自 csv 文件的列表,比如
a=[['1','a'],['2','b']]
现在我只想要第一列,数字“1”和“2”,并将它们转换为一个 numpy 数组。我该如何做到这一点?使用 b = np.array(a) 将所有项目作为字符串放入数组中。
请您参考如下方法:
您可以使用 numpy.fromiter与 operator.itemgetter .请注意,标准 NumPy 数组不是混合类型 (dtype object) 的好选择,因为这会导致所有数据都存储在指针中。
a = [['1', 'a'], ['2', 'b']]
from operator import itemgetter
res = np.fromiter(map(itemgetter(0), a), dtype=int)
print(res)
array([1, 2])
一些性能基准测试:
a = [['1', 'a'], ['2', 'b']] * 10000
%timeit np.fromiter(map(itemgetter(0), a), dtype=int) # 4.31 ms per loop
%timeit np.array(a)[:, 0].astype(int) # 15.1 ms per loop
%timeit np.array([i[0] for i in a]).astype(int) # 8.3 ms per loop
如果你需要 structured array混合类型:
x = np.array([(int(i[0]), i[1]) for i in a],
dtype=[('val', 'i4'), ('text', 'S10')])
print(x)
array([(1, b'a'), (2, b'b')],
dtype=[('val', '<i4'), ('text', 'S10')])
