我正在尝试构建一个 python C 扩展,以便将一个 numpy 矩阵传递给一个 C 数组。我正在遵循此处报告的建议:
http://wiki.scipy.org/Cookbook/C_Extensions/NumPy_arrays
但是当 Python 尝试运行 C 行时:
v=(float **)malloc((size_t) (n*sizeof(float)));
以下部分代码:
float **_ptrvector(long n) {
float **v;
v=(float **)malloc((size_t) (n*sizeof(float)));
if (!v) {
printf("In **ptrvector. Allocation of memory for array failed.");
exit(0); }
return v;
}
float **pymatrix_to_carray(PyArrayObject *arrayin) {
float **c, *a;
int i,n,m;
n = PyArray_DIM(arrayin, 0);
m = PyArray_DIM(arrayin, 1);
c=_ptrvector(n);
a = (float*) PyArray_DATA(arrayin);
for ( i=0; i<n; i++) {
c[i]=a+i*m; }
return c;
}
我的 Linux 64 位机器出现分段错误。问题是这段代码在 32 位机器(Windows 和 Linux)上完美运行。此外 sizeof(size_t) 在 32 位机器上正确返回 4,在 64 位机器上正确返回 8。我在内核版本为 2.6.18 的 Red Hat Linux 4.2.1-44 上使用 Python 2.7.1 [EPD 7.0-2(64 位)] 和 GCC 4.1.2。
我也尝试使用 npy_intp 和 Py_ssize_t 而不是 size_t 但没有积极效果。