我正在try 实现一些使用双变量正态CDF的概率工作.在R中,I可以使用the pbivnorm package(特别是第90行),例如(带有一些虚构的数字)

library(pbivnorm)
.Fortran("PBIVNORM", as.double(0), c(0,0), as.double(-0.1), as.double(-0.2), as.integer(c(0,0)), as.double(0), as.integer(1), PACKAGE="pbivnorm")

[[1]]
[1] 0.193613

[[2]]
[1] 0 0

[[3]]
[1] -0.1

[[4]]
[1] -0.2

[[5]]
[1] 0 0

[[6]]
[1] 0

[[7]]
[1] 1

我从the package here中提取了底层Fortran代码,并使用F2py(命名为已编译的.so文件Fortran)对其进行编译,因此我可以执行以下操作:

import fortran
fortran.pbivnorm(float(0), [float(0), float(0)], float(-0.1), float(-0.2), [int(0), int(0)], float(0),int(1))

但是,这将返回NONE.我知道该子 routine 在技术上更改了提供给它的值,因此我还提供了各种命名常量,但它们在被查询时保持不变.

也觉得可能与对输入类型的挑剔有关?

如有任何帮助,不胜感激!

推荐答案

您的假设是正确的,即存在与类型不匹配的情况.默认的python类型(列表)不适合调用此函数.此外,变量PROB用作该函数的输出,因此不能只使用文字.通过查看原始Fortran函数签名,您的参数和代码应该如下所示:

import fortran
import numpy as np


PROB = np.array([0], order="F", dtype=np.double)
LOWER = np.array([0, 0], order="F", dtype=np.double)
UPPERA = np.array([-0.1], order="F", dtype=np.double)
UPPERB = np.array([-0.2], order="F", dtype=np.double)
INFIN = np.array([0, 0], order="F", dtype=np.int32)
CORREL = np.array([0], order="F", dtype=np.double)
LENGTH = np.int32(1)

fortran.pbivnorm(PROB, LOWER, UPPERA, UPPERB, INFIN, CORREL, LENGTH)

print(PROB, LOWER, UPPERA, UPPERB, INFIN, CORREL, LENGTH)

Python相关问答推荐

PyQt5如何将pyuic 5生成的Python类添加到QStackedWidget中?

过载功能是否包含Support Int而不是Support Int?

请从Python访问kivy子部件的功能需要帮助

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

我必须将Sigmoid函数与r2值的两种类型的数据集(每种6个数据集)进行匹配,然后绘制匹配函数的求导.我会犯错

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Pandas 滚动最接近的价值

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

未删除映射表的行

如何在Raspberry Pi上检测USB并使用Python访问它?

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

Polars asof在下一个可用日期加入

启动带有参数的Python NTFS会导致文件路径混乱

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Flash只从html表单中获取一个值

Python避免mypy在相互引用中从另一个类重定义类时失败

将链中的矩阵乘法应用于多组值

使用SeleniumBase保存和加载Cookie时出现问题