我试图将Numpy数组传递到C中,但在Windows和Linux中得到不同的结果。你知道吗
在Python中
import platform
import numpy as np
import ctypes
if platform.system() == 'Windows':
c_fun = np.ctypeslib.load_library("/mypath/c_fun.dll", ".").c_fun
else: # Linux
c_fun = np.ctypeslib.load_library("/mypath/c_fun.so", ".").c_fun
c_fun.argtypes = [np.ctypeslib.ndpointer(dtype=np.int, ndim=2, flags="C_CONTIGUOUS"), ctypes.c_int, ctypes.c_int]
array = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]])
rows, cols = array.shape
c_fun(array, rows, cols)
在C中
void c_fun(int* array, int rows, int cols)
{
for (int i = 0; i < rows * cols; i++)
printf("%d ", array[i]);
}
当我在Windows下运行这个程序时,输出是“0 1 0 0 1 0 0 1 0”,效果很好。你知道吗
但是在Linux中,输出是“0 0 1 0 0 0 0 0 1”,为什么?你知道吗
首先,不要使用
numpy.int
。这只是int
,不是什么傻事。我认为这是为了向后兼容。你知道吗默认情况下,NumPy将Python int转换为数据类型
numpy.int_
(注意下划线),并且numpy.int_
对应于Clong
,而不是Cint
。因此,只有当Cint
和long
的大小相同时,您的代码才能工作,这两种大小在Windows上相同,但在Linux上不同。你知道吗相关问题 更多 >
编程相关推荐