gpt4 book ai didi

python - Cython int ** 和 int * 类型

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:51 25 4
gpt4 key购买 nike

我试图用 Cython 包装一些 C 代码,但我遇到了一个我不明白的错误,尽管进行了大量搜索,但我似乎无法在其中找到任何东西。这是我的 C 代码

void cssor(double *U, int m, int n, double omega, double tol, int maxiters, int *info){
double maxerr, temp, lcf, rcf;
int i, j, k;
lcf = 1.0 - omega;
rcf = 0.25 * omega;
for (k =0; k < maxiters ; k ++){
maxerr = 0.0;
for (j =1; j < n-1; j++) {
for (i =1; i < m-1; i++) {
temp = U[i*n+ j];
U[i*n+j] = lcf * U[i*n+j] + rcf * (U[i*n+j-1] + U [i*n+j+1] + U [(i-1)*n + j] + U [(i+1)*n+j]);
maxerr = fmax(fabs(U[i*n+j] - temp), maxerr);
}
}
if(maxerr < tol){break;}
}
if (maxerr < tol) {*info =0;}
else{*info =1;}

我的 .pyx 文件是

    cdef extern from "cssor.h":
void cssor(double *U, int m, int n, double omega, double tol, int maxiters, int *info)

cpdef cyssor(double[:, ::1] U, double omega, double tol, int maxiters, int *info):
cdef int n, m
m = U.shape[0]
n = U.shape[1]
cssor(&U[0, 0], m, n, omega, tol, maxiters, &info)

但是,当我尝试运行关联的安装文件时,我在代码的最后一行中收到一条错误消息,指的是 maxiters:

无法将类型“int **”分配给类型“int *”

你能告诉我如何解决这个问题吗?

罗伊罗斯

最佳答案

问题出在这里:

cpdef cyssor(double[:, ::1] U, double omega, double tol, int maxiters, int *info):
cdef int n, m
m = U.shape[0]
n = U.shape[1]
cssor(&U[0, 0], m, n, omega, tol, maxiters, &info)

您将 info 声明为 int* 类型。但是您随后将其作为对 int* 的引用传递给 cssor 函数,使其成为 int**

正确的代码是:

cssor(&U[0, 0], m, n, omega, tol, maxiters, info)

关于python - Cython int ** 和 int * 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com