Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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中提高以下代码的性能?_Python_Numpy - Fatal编程技术网

如何在Python中提高以下代码的性能?

如何在Python中提高以下代码的性能?,python,numpy,Python,Numpy,基本上,它所做的是在s数组中定位dE[i,j]的值,并向该位置添加相应的值(n[j]+1)*i[i,j]。有没有办法避免for循环?从技术上讲,你可以在it中使用for i,j.product(range(N),range(M)):do_something(),但老实说,瓶颈是argmin和循环的时间复杂度:由于你的算法设计,你的速度很慢。如果可能的话,考虑寻找重构的方法,或者如果性能令人望而却步而无法重构的话,可以用C编写一个扩展 如果性能不是瓶颈,雅格尼:你不会需要它的。过早的优化是万恶之源

基本上,它所做的是在
s
数组中定位
dE[i,j]
的值,并向该位置添加相应的值
(n[j]+1)*i[i,j]
。有没有办法避免for循环?

从技术上讲,你可以在it中使用
for i,j.product(range(N),range(M)):do_something()
,但老实说,瓶颈是
argmin
和循环的时间复杂度:由于你的算法设计,你的速度很慢。如果可能的话,考虑寻找重构的方法,或者如果性能令人望而却步而无法重构的话,可以用C编写一个扩展


如果性能不是瓶颈,雅格尼:你不会需要它的。过早的优化是万恶之源。

我不知道如何设置
l1
。但是我怀疑如果你能为所有的
I,j
得到
l2
,那么对
A[l1,l2]
的添加可以用一个numpy表达式完成。如果
l1、l2
值具有重复项,则加法将更加复杂,但并非不可能。所以我猜,
argmin
表达式是症结所在。你可以先把重点放在消除
j
循环上。谢谢你的回答。实际上,我试图寻找在IDL中实现的Value_Locate(s,dE)的Python版本,其中dE可以是数字或多维数组。但由于某种原因,Python中缺少这样的函数,或者它可能存在于Numpy之外的另一个包中?如果Numpy可以通过添加一个处理数组的功能来改进argmin,那就太好了。@Paitel,可能是因为它根据数组维度以及矩阵/数组的排序位置而有很大的不同。如果对数据进行了排序,您可以使用
searchsorted()
,大大降低时间复杂度。
for i in range(N):
   for j in range(M):
      l2 = numpy.argmin(numpy.abs(s - dE[i,j]))
      A[l1,l2] = A[l1,l2] + (n[j]+1)*I[i,j]