- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了如下所示的这段代码。我遇到了严重的性能问题。尤其是 i 循环 5000 万次的循环(for z in range(total):) 看起来非常慢。我可以修改它以提高效率吗? - 也许修改它在 r1,r2 中存储最后 10 个值之和的方式?
import numpy as np
import math
import scipy.stats as sp
# Define sample size
sample=4999999
cutoff=int((sample+1)/100)
# Define days for x-day VaR
xdays=10
# Calculate the whole sample size and extended total sample size
size=sample*xdays+xdays-1
total=size+xdays
cutoff_o=int((size+1)/100)
# Sample values for kurtosis
#kurt=[0.0000001,1.0,2.0,3.0,4.0,5.0,6.0,10.0]
kurt=[6.0]
# Number of repetitions
rep=2
# Define correlation coefficient
rho=0.5
# Loop for different iterations
for x in range(rep):
uni=sp.uniform.rvs(size=total)
# Loop for different values of kurtosis
for y in kurt:
df=(6.0/y)+4.0
# Initialize arrays
t_corr=np.empty(total)
n_corr=np.empty(total)
t_corr_2=np.empty(total)
r1=np.empty(sample)
r2=np.empty(size)
r3=np.empty(sample)
r4=np.empty(size)
# Define t dist from uniform
t_dist=sp.t.ppf(uni,df)
n_dist=sp.norm.ppf(uni)
# Loop to generate autocorrelated distributions
for z in range(total):
if z==0:
t_corr[z]=t_dist[z]
n_corr[z]=n_dist[z]
t_corr_2[z]=sp.t.ppf(sp.norm.cdf(n_corr[z]),df)
else:
t_corr[z]=rho*t_dist[z-1] + math.sqrt((1-rho**2))*t_dist[z]
n_corr[z]=rho*n_dist[z-1] + math.sqrt((1-rho**2))*n_dist[z]
t_corr_2[z]=sp.t.ppf(sp.norm.cdf(n_corr[z]),df)
if z>xdays-1:
z_x=int(z/xdays)-1
if (z%xdays)==0 and z_x<sample:
r1[z_x]= sum(t_corr[z-10:z])
r3[z_x]= sum(t_corr_2[z-10:z])
r2[z-xdays]= sum(t_corr[z-10:z])
r4[z-xdays]= sum(t_corr_2[z-10:z])
print (np.partition(r1, cutoff-1)[cutoff-1], np.partition(r3, cutoff-1)[cutoff-1], np.partition(r2, cutoff_o-1)[cutoff_o-1], np.partition(r4, cutoff_o-1)[cutoff_o-1])
print ()
最佳答案
一些建议:
首先,您可以从循环中删除 if
语句。当程序员知道 z
在第一个循环中等于 0 时,检查 z == 0
数百万次似乎有点不必要。 if z>xdays-1
也是如此:
if z==0:
t_corr[z]=t_dist[z]
n_corr[z]=n_dist[z]
t_corr_2[z]=sp.t.ppf(sp.norm.cdf(n_corr[z]),df)
for z in range(1, xdays - 1):
t_corr[z]=rho*t_dist[z-1] + math.sqrt((1-rho**2))*t_dist[z]
n_corr[z]=rho*n_dist[z-1] + math.sqrt((1-rho**2))*n_dist[z]
t_corr_2[z]=sp.t.ppf(sp.norm.cdf(n_corr[z]),df)
for z in range(xdays - 1, total)
t_corr[z]=rho*t_dist[z-1] + math.sqrt((1-rho**2))*t_dist[z]
n_corr[z]=rho*n_dist[z-1] + math.sqrt((1-rho**2))*n_dist[z]
t_corr_2[z]=sp.t.ppf(sp.norm.cdf(n_corr[z]),df)
z_x=int(z/xdays)-1
if (z%xdays)==0 and z_x<sample:
r1[z_x]= sum(t_corr[z-10:z])
r3[z_x]= sum(t_corr_2[z-10:z])
r2[z-xdays]= sum(t_corr[z-10:z])
r4[z-xdays]= sum(t_corr_2[z-10:z])
请仔细检查;我刚刚把它扔掉了:)
一个廉价/黑客修复实际上可以提供一些严重的好处!您可以尝试将 python 代码编译为二进制文件,例如使用 Cython。实际上,我用一个人为的但与您的示例相似的示例对此进行了测试,我希望它能为您提供足够的信息来开始。假设我有以下 python 脚本:
import math
for j in range(1000):
for i in range(1000):
a = math.sqrt(i) * math.sqrt(j)
在我的 Ubuntu VM 上使用 python3 fast.py
运行它始终需要 0.4 秒的实时时间。运行以下命令:
$ cython3 --embed -o fast.c fast.py
$ gcc -I /usr/include/python3.4m/ -o fast fast.c -lpython3.4m
从我的Python代码生成一个.c
文件,并自动为我编译二进制fast
。现在运行可执行文件的平均实时时间为 0.14 秒 - 一个巨大的改进!
另一个问题可能与您的列表切片有关。请记住,切片表示法涉及每次创建一个新列表,这意味着您将使用四个切片创建约 200,000,000 个新列表。现在我不确定这会更快,但您可以在不复制的情况下实现相同的行为,例如:
sum(t_corr[z-10:z])
可以替换为
sum(t_coor[i] for i in range(z, 10))
再次,将其修复为您真正想要的;这只是一个概念作品。
请告诉我这是否有帮助!
关于python - 如何提高以下 python 代码的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830050/
这个问题在这里已经有了答案: standalone parentheses in javascript [duplicate] (5 个答案) 关闭 8 年前。 我在学习JavaScript,有时会
我是mysql新手,我必须减少以下更新查询的执行时间 UPDATE temp_countcalculations, ( SELECT count(*) as insuffcounts,CRP_
def escape_html(s): for (i, o) in (("&","&"),(">", ">"),(" "变成 ">"等。 关于python - 以下 for 循环
if (read(read(cin, data1), data2)) 问题是C++ Primer 5th Edition 的练习。 read 函数定义如下: std::istream &read(st
我想创建两个宏。其中一个将扩展到函数原型(prototype)和函数内容,另一个将扩展到仅函数原型(prototype)。我正在考虑创建以下内容: #ifdef SOME_CONDITION #def
我正在使用 jongo API - org.jongo.MongoCollection 是类。 我有对象 ID 列表并转换为与 ObjectId[] 相同并尝试按如下方式查询 collection.f
有人可以解释以下正则表达式匹配什么吗? ^.*$ 谢谢! 最佳答案 或者整个字符串或者整行,取决于是否multiline mode被使用。 关于java - 以下 ^.*$ 正则表达式匹配什么?,我们
#include void main() { int a,b,c; for(b = c = 10; a = "- FIGURE?, UMKC,XYZHello Folks,TFy!QJ
我的代码段中的以下代码行被 Sonar 检测为问题。 代码段: final int Pending=1; Sonar 问题: Name 'Pending' must matc
Print name of all activities with neither maximum nor minimum number of participants 我尝试了以下查询,但出现错误:
这个问题在这里已经有了答案: What is this practice called in JavaScript? (7 个回答) 关闭8年前。 (function() { //do stuff
根据任务,我们必须通过 foldr 实现 foldl。通过比较函数签名和 foldl 实现,我得到了以下解决方案: myFoldl :: (a -> b -> a) -> a -> [b] -> a
这个问题在这里已经有了答案: Export an es6 default class inline with definition or at end of file? (1 个回答) 关闭 2 年
据我了解,以下是相同的: Person p{}; // Case 1 Person p = {}; // Case 1.5 我注意到 Person p = Person{}; // Case 2 产生
below i have given a javascript code picture `` can any one help me in this code. what do this code.
我想在标题和正文上搜索全文,并在答案计数上进行过滤。 我阅读了elasticsearch documentation for combining filters并构建了此查询。 "query": {
它是流动的 C 代码中的内存泄漏吗? #include int *a; int main() { a = malloc(sizeof(int)*10); return
这两个声明有什么区别: char (*ptr)[N]; 对比 char ptr[][N]; 谢谢。 最佳答案 (1)声明 char (*ptr)[N]; ptr 是指向大小为 N 的字符数组的指针 下
data II = I Int Int deriving (Show) instance II Show where show I a b = show (a+b) showt.hs:3:2: s
我从 clojuredoc 中阅读了关于 condp 的文档。在文档中我找到了以下代码: (condp 一些 [1 2 3 4] #{0 6 7} :>> 公司 #{4 5 9} :>> 十二月 #{
我是一名优秀的程序员,十分优秀!