如何解决搜索区间优化
我的目标是使用给定的算法找到某个分布的概率密度函数。
这个算法要求我搜索浮点数放置在哪个区间。即使代码运行完美,也需要太长时间。我一直在寻找优化代码的方法,但没有想到。
在每次迭代中,我检查浮点数是否在区间内:如果是这种情况,我希望在数组 p 中统一我正在考虑的位置。
这是我的代码:
import numpy as np
import pylab as plt
import random as rd
n = [10,100,1000]
N = [10**6]
dy = 0.005
k_max = int(1/dy-1)
y = np.array([(j+0.5)*dy for j in range(k_max+1)])
intervals = np.linspace(0,1,k_max+2)
def p(y,n,N):
p = np.zeros(len(y))
Y = np.array([sum(np.array([rd.random() for k in range(n)]))/n for j in range(N)])
z = np.array([sum(np.array([rd.random() for k in range(n)])) for l in range(N)])
for j in Y:
for i in range(len(y)-1):
if intervals[i] <= j < intervals[i+1]:
p[i] += 1
return(p/(dy*N))
for a in n:
pi = p(y,a,N[0])
plt.plot(y,pi,label = 'n = ' + str(a))
plt.title('Probability Density Function')
plt.xlabel('x')
plt.ylabel('p(x)')
plt.show()
编辑:我已按要求添加了完整代码。 编辑 2: 修正了错误间隔。
解决方法
可以在此处进行快速简单的优化:
for j in Y:
for i in range(len(y)-1):
if intervals[i] <= j < intervals[i+1]:
p[i] += 1
由于intervals
由len(y)
在区间[0,1]上均匀分布的数字组成,这也是Y
值的范围,我们不需要搜索{{ 1}} 在 j
中,而是我们可以计算它。
intervals
我们也可以删除未使用的
for j in Y: p[int(j*(len(y)-1))] += 1
剩余执行时间的大部分由
z = np.array([sum(np.array([rd.random() for k in range(n)])) for l in range(N)])
这里对 Y = np.array([sum(np.array([rd.random() for k in range(n)]))/n for j in range(N)])
的内部转换非常耗时;最好把它们都排除在外:
np.array
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。