我是NumPy的新手,我试图在我的代码中使用它来处理一些表.
coordinates = [["2 0"],["0 1"],["3 4"]]
并希望像这样写:
coordinatesNumpy = np.array([[2,0],[0,1],[3,4]])
在常规Python中,这很容易,但你如何使用NumPy?我是否应该使用常规Python函数为列表创建表,然后将2d表转换为np.array,或者NumPy是否具有拆分和填充的方法?
我尝试了一些东西,但他们都给了我一个错误.我试过的最新事情:
flowers = np.array([np.array([int(coordinate[0]),int(coordinate[2])]) for coordinate in coordinates])
我怎么能用NumPy做这样的事情?
解决方法
使用纯Python列出理解
这有效:
>>> flowers = np.array([[int(x) for x in coordinate[0].split()] for coordinate in coordinates]) >>> flowers array([[2,4]])
我不知道任何NumPy功能可以一步完成.
我们来看看事情有多快.
对于您的示例数据,纯Python版本是最快的:
%timeit np.array([np.fromstring(i,dtype=int,sep=' ') for j in coordinates for i in j]) 100000 loops,best of 3: 18.4 µs per loop %timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in coordinates]) 10000 loops,best of 3: 19 µs per loop %timeit np.array([[int(x) for x in coordinate[0].split()] for coordinate in coordinates]) 100000 loops,best of 3: 12.1 µs per loop
使数据更大:
long_coords = coordinates * 1000
但是,sep=' ') for j in long_coords for i in j]) 100 loops,best of 3: 12.2 ms per loop %timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in long_coords]) 100 loops,best of 3: 14.2 ms per loop %timeit np.array([[int(x) for x in coordinate[0].split()] for coordinate in long_coords]) 100 loops,best of 3: 7.54 ms per loop
更大数据的一致结果:
very_long_coords = coordinates * 10000 %timeit np.array([np.fromstring(i,sep=' ') for j in very_long_coords for i in j]) 10 loops,best of 3: 125 ms per loop %timeit np.array([np.fromstring(item[0],sep=' ').tolist() for item in very_long_coords]) 10 loops,best of 3: 140 ms per loop %timeit np.array([[int(x) for x in coordinate[0].split()] for coordinate in very_long_coords]) 10 loops,best of 3: 73.5 ms per loop