- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试获取作为积分结果的函数 expected_W 或 H:
哪里:
这就是我解决问题的方式。我确信我制作的包装函数一团糟,所以我也很乐意收到任何帮助。
from __future__ import division
from scipy import integrate
from scipy.stats import norm
import math
import numpy as np
def exp_w(w_B, sigma_eps = 1, **kwargs):
'''
Integrates the w_B function
Input:
+ w_B : the function to be integrated.
+ sigma_eps : variance of the epsilon term. Set to 1 by default
'''
#The integrand function gives everything under the integral:
# w(B(p, \theta, \epsilon, \beta)) f(\beta | \theta ) q(\epsilon)
def integrand(eps, beta, p, theta_0, theta_1, sigma_eps=sigma_eps):
q_e = norm.pdf(eps, loc=0, scale=math.sqrt(sigma_eps))
f_beta = norm.pdf(beta, loc=theta_0, scale=math.sqrt(theta_1))
return w_B(p = p,
theta_0 = theta_0, theta_1 = theta_1,
eps = eps, beta=beta)* q_e *f_beta
#limits of integration. Using limited support for now.
eps_inf = lambda beta : -10 # otherwise: -np.inf
eps_sup = lambda beta : 10 # otherwise: np.inf
beta_inf = -10
beta_sup = 10
def integrated_f(p, theta_0, theta_1):
return integrate.dblquad(integrand, beta_inf, beta_sup,
eps_inf, eps_sup,
args = (p, theta_0, theta_1))
# this integrated_f is the H referenced at the top of the question
return integrated_f
我用一个简单的 w 函数测试了这个函数,我知道它的解析解(通常情况不会这样)。
def test_exp_w():
def w_B(p, theta_0, theta_1, eps, beta):
return 3*(p*eps + p*(theta_0 + theta_1) - beta)
# Function that I get
integrated = exp_w(w_B, sigma_eps = 1)
# Function that I should get
def exp_result(p, theta_0, theta_1):
return 3*p*(theta_0 + theta_1) - 3*theta_0
args = np.random.rand(3)
d_args = {'p' : args[0], 'theta_0' : args[1], 'theta_1' : args[2]}
if not (np.allclose(
integrated(**d_args)[0], exp_result(**d_args)) ):
raise Exception("Integration procedure isn't working!")
因此,我的实现似乎是有效的,但对于我的目的而言它非常慢。我需要重复此过程数万次或数十万次(这是值(value)函数迭代中的一个步骤。如果人们认为相关,我可以提供更多信息)。
使用 scipy
0.14.0 版和 numpy
1.8.1 版,计算这个积分需要 15 秒。
有人对如何解决这个问题有什么建议吗?首先,tt 可能有助于获得有界的积分域,但我还没有弄清楚如何做到这一点,或者 SciPy 中的高斯正交是否以一种好的方式处理它(它使用 Gauss-Hermite 吗?) .
感谢您的宝贵时间。
---- 编辑:添加分析时间-----
%lprun 结果表明大部分时间花在_distn_infraestructure.py:1529(pdf)
和_continuous_distns.py:97(_norm_pdf)
每个都有高达 83244 个电话号码。
最佳答案
如果函数不是一个令人讨厌的函数,那么集成函数所花费的时间听起来会很长。
我建议您做的第一件事是分析时间花在了哪里。是花在 dblquad
还是其他地方?在集成期间对 w_B
进行了多少次调用?如果时间花在 dblquad
上并且调用次数非常多,您可以在集成中使用更宽松的容差吗?
似乎高斯的乘法实际上使您能够大大限制积分限制,因为高斯的大部分能量都在非常小的区域内。您可能想尝试计算合理的更严格的界限。您已经将区域限制为-10..10; -100..100、-10..10 和 -1..1 之间是否存在任何显着的性能变化?
如果你知道你的功能比较流畅,那么有一个米老鼠版的集成:
这是非常低技术含量但也非常快。它是否为您提供了足以进行外部迭代的结果是一个有趣的问题。它只是可能。
关于python - 慢 scipy 双正交积分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253020/
我有一个由给定时刻的一组节点组成的图。该图可能会随着时间的推移而演变,即节点之间的关系以及节点本身可能会发生变化。 绘图必须是正交绘图。 我想画出图表的演变过程,即在不同的时刻绘制图表的图像,尝试从一
我有一个由 graphviz 工具制作的无向图(现在我正在使用 sfdp ): digraph structs { node [shape=Mrecord, URL="index_ne
我有一个世界地图的正交投影,在 D3 中并使用 TopoJSON。我通过调用此代码为每次加载数据的国家/地区着色。 地球在不停地旋转。 我的问题是,在旋转过程中我收到错误消息: 错误 >> 错误:在
我是 opencv 和 c++ 的新手,一直在尝试确定两条线是否几乎相互垂直/正交。有这个公式可以确定它们是否完全正交(m1*m2 = -1),而 m1 是第一个直线的斜率,m2 是第二个直线的斜率。
悬停时按钮会翻转但无法显示透视图。这就像动画的平面正交 View 。我使用的 perspective 属性有误吗? @import 'https://necolas.github.io/normali
我正在尝试使用高斯积分来近似函数的积分。 (更多信息在这里:http://austingwalters.com/gaussian-quadrature/)。第一个函数在区间 [-1,1] 上。第二个函
我在使用 opengl 绘制简单的 2d 纹理四边形时遇到了 z fighting 的一些问题。症状是两个物体以相同的速度移动,一个在另一个上面,但周期性地一个可以看穿另一个,反之亦然 - 有点像“闪
我正在尝试在背景图像(正交投影)顶部使用 Frustum 投影渲染一些网格。无论我做什么,背景图像始终位于场景顶部(隐藏网格)。 我尝试了一个小测试 - 当我用相同的投影矩阵渲染它们时 以正确的顺序
我是一名优秀的程序员,十分优秀!