我正在将我所有用python编写的代码切换到julia中以减少计算时间。为此,我需要将以下代码从python翻译到Julia中,但由于我对Julia仍然是新手,因此在重新发明轮子之前,我不确定当前的功能是什么。
Python代码:
def calculate_2d_probability_over_volume(internal_matrix, px, py):
px = px[px >= 0]
py = py[py >= 0]
integrated_px = [np.trapz(px * row, px) for row in internal_matrix] # \int p_x * f(p_x, p_y) dp_x
return 2 / (2 * np.pi ** 2) * np.trapz(integrated_px[::-1], py) # \int integrated_px(p_y) dp_y
在前两行中,我确保px和py只有正值,它们都是前两行之后维度为N
的Numpy数组。矩阵是NxN矩阵,它与px
和py
值相关如下:
假设矩阵的值由函数f(px,py)定义:
- 每行是一个py值
- 每列是一个px值
- 矩阵的左下值对应于
f(min(px),min(py))
,矩阵的右上值对应于f(max(px),max(py))
。
px,py按升序排列,所以min(px)==px[0]
如果矩阵由二维函数f(px,py)表示,则要计算的积分由下式给出:
b * ∫dpy∫dpx px * f(px,py)
其中B是不需要进一步解释的因子。
该算法使用numpy的向量化来快速评估它。我现在需要在Julia的生态系统中重新实现该算法。是否有类似于np.trapz()
的函数?我希望该函数已经带有错误估计。
编辑:修复了行和列规范中的排印错误
1条答案
按热度按时间xytpbqjk1#
这不是一个完整的答案,但也许可以作为一个起点。定义:
给出与此函数的NumPy版本相同的结果: