gpt4 book ai didi

Python,如何优化这段代码

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:07 25 4
gpt4 key购买 nike

我试图优化下面的代码,但我不知道如何提高计算速度。我试过 Cthon,但性能就像在 python 中一样。

是否可以在不重写 C/C++ 中的所有内容的情况下提高性能?

感谢您的帮助

import numpy as np

heightSequence = 400
widthSequence = 400
nHeights = 80

DOF = np.zeros((heightSequence, widthSequence), dtype = np.float64)
contrast = np.float64(np.random.rand(heightSequence, widthSequence, nHeights))

initDOF = np.zeros([heightSequence, widthSequence], dtype = np.float64)
initContrast = np.zeros([heightSequence, widthSequence, nHeights], dtype = np.float64)
initHeight = np.float64(np.r_[0:nHeights:1.0])
initPixelContrast = np.array(([0 for ii in range(nHeights)]), dtype = np.float64)


# for each row
for row in range(heightSequence):
# for each col
for col in range(widthSequence):

# initialize variables
height = initHeight # array ndim = 1
c = initPixelContrast # array ndim = 1

# for each height
for indexHeight in range(0, nHeights):
# get contrast profile for current pixel
tempC = contrast[:, :, indexHeight]
c[indexHeight] = tempC[row, col]

# save original contrast
# originalC = c
# originalHeight = height

# remove profile before maximum and after minumum contrast
idxMaxContrast = np.argmax(c)
c = c[idxMaxContrast:]
height = height[idxMaxContrast:]

idxMinContrast = np.argmin(c) + 1
c = c[0:idxMinContrast]
height = height[0:idxMinContrast]

# remove some refraction
if (len(c) <= 1) | (np.max(c) <= 0):
DOF[row, col] = 0

else:

# linear fitting of profile contrast
P = np.polyfit(height, c, 1)
m = P[0]
q = P[1]

# remove some refraction
if m >= 0:
DOF[row, col] = 0

else:
DOF[row, col] = -q / m

print 'row=%i/%i' %(row, heightSequence)

# set range of DOF
DOF[DOF < 0] = 0
DOF[DOF > nHeights] = 0

最佳答案

通过查看代码,您似乎可以完全摆脱两个外部循环,将代码转换为向量化 形式。然而,np.polyfit 调用必须被其他一些表达式替换,但是线性拟合的系数很容易找到,也是矢量化形式。最后一个 if-else 可以变成一个 np.where 调用。

关于Python,如何优化这段代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15134442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com