Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将二维动态指针数组作为参数传递给cython中的函数_Python_C_Arrays_Pointers_Cython - Fatal编程技术网

Python 将二维动态指针数组作为参数传递给cython中的函数

Python 将二维动态指针数组作为参数传递给cython中的函数,python,c,arrays,pointers,cython,Python,C,Arrays,Pointers,Cython,在我的代码中,我试图定义一个行数和列数不断变化的动态数组,这取决于函数中的新条件,这意味着我可能会添加更多的行或列。我尝试创建二维指针数组,我希望能够将这个二维指针数组作为参数传递给函数 这是我代码的一小部分: 更新:test.pyx 更新: 代码已编译,但在python中导入run函数时,出现以下错误: >>> import test >>> test.run( 10, 4,0.9) Segmentation fault (core dumped) 我不确

在我的代码中,我试图定义一个行数和列数不断变化的动态数组,这取决于函数中的新条件,这意味着我可能会添加更多的行或列。我尝试创建二维指针数组,我希望能够将这个二维指针数组作为参数传递给函数

这是我代码的一小部分:

更新:test.pyx

更新:

代码已编译,但在python中导入run函数时,出现以下错误:

>>> import test
>>> test.run( 10, 4,0.9)
Segmentation fault (core dumped)
我不确定我定义的二维数组是解决定义动态数组问题的最佳方法,我得到这个错误的原因是什么

任何建议都是非常受欢迎的。

问题是n、d和alpha都是Python变量,所以&n不是您可以做的事情。您可以将run更改为cdef函数,或者创建临时版本:

cdef int _n = n;
然后通过&\n


但是,根据您的代码,向这三个变量传递指针有什么意义呢?你不能修改它们。您可以不使用指针直接传递它们。

您当前的问题是:

<int **>(&Z[0][0])
获取第一行的第一个元素的地址并将其强制转换为int**。它实际上是一个int*,因为它是一个int的地址。因此初始化器写入的内存是无意义的,你会得到一个分段错误。演员阵容通常表明你做错了什么


您只需通过已经是整数的Z即可**。

谢谢您的回答!它修复了这个错误,但我的主要问题是定义动态数组的最佳方法是什么?那么gsl_矩阵呢?在cython是如何工作的?我还需要求平方矩阵的逆,我想这是个不错的选择,对吧?你有什么建议吗?为什么不直接使用numpy阵列呢?但我真的不知道。我之所以在社区维基上回答这个问题,是因为我看到了一个明显的错误,并认为值得指出,但我不想回答全部问题。
cdef int _n = n;
<int **>(&Z[0][0])