Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用Numpy更快地生成2D数组_Python_Numpy - Fatal编程技术网

Python:使用Numpy更快地生成2D数组

Python:使用Numpy更快地生成2D数组,python,numpy,Python,Numpy,我想学习使用Numpy在Python中生成2D数组的更快方法 我当前的代码使用生成器: h,w= img.shape[:2] 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] 问题很简单:我们如何使用Numpy加快这一速度 注:img为2D numpy.array,其大小为10 x 10。上面的代码本身并不慢,但是我需要重复336次,这需要时间 非常感谢,如果我正确理解了您的问

我想学习使用Numpy在Python中生成2D数组的更快方法

我当前的代码使用生成器:

h,w= img.shape[:2]
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]
问题很简单:我们如何使用Numpy加快这一速度

注:img为2D numpy.array,其大小为10 x 10。上面的代码本身并不慢,但是我需要重复336次,这需要时间


非常感谢,

如果我正确理解了您的问题,您可以使用纯numpy解决方案

设置示例数据

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)
与努比

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解决方案可能会受益于一次性对所有336幅图像进行矢量化计算

%%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]
10 loops, best of 3: 25.6 ms per loop