import numpy as np
np.random.seed(10)
img = np.random.randint(0,10,(10,10))
h,w= img.shape
points= [[x-w/2,y-h/2,img[y,x]] for y in range(h) for x in range(w) if img[y,x]!=0]
points = np.array(points)
使用NumPy:
np_points = np.vstack([np.where(img != 0), img[img != 0].ravel()]).T[:,[1,0,2]] - [w/2 , h/2, 0]
assert np.array_equal(np_points,points), 'solutions are not equal'
差别不大。NumPy解决方案将受益于所有图像的矢量化计算。
%%timeit
for i in range(336):
np_points = np.vstack([np.where(img != 0), img[img != 0].ravel()]).T[:,[1,0,2]] - [w/2 , h/2, 0]
输出:
100 loops, best of 3: 7.71 ms per loop
%%timeit
for i in range(336):
points= [[x-w/2,y-h/2,img[y,x]] for y in range(h) for x in range(w) if img[y,x]!=0]
1条答案
按热度按时间kse8i1jr1#
设置示例数据:
使用NumPy:
差别不大。NumPy解决方案将受益于所有图像的矢量化计算。
输出:
输出: