我正在学习C类型。我的目标是在python中生成一个从0到4*pi分为500步的numpy数组A。该数组将传递给计算这些值的C代码的正切值。C代码还将把这些值传递回python的另一个numpy数组B。
昨天我尝试了简单地将一个值从python转换为C,并成功了一次(经过一些帮助)。今天,我要尝试传递整个数组,而不是一个值。
我认为向C库添加另一个处理数组的函数是一个好主意。新函数应该循环将A的每个值传递给tan1()函数,并将该值存储在数组B中。
我有两个问题:
- 编写处理numpy数组A的函数
- 在python和C代码之间传递numpy数组。
我阅读了以下信息:
这些都很有帮助,但我仍然不知道如何解决我的问题。
C代码(仅相关部分):
double tan1(f) double f;
{
return sin1(f)/cos1(f);
}
void loop(double A, int n);
{
double *B;
B = (double*) malloc(n * sizeof(double));
for(i=0; i<= n, i++)
{
B[i] = tan1(A[i])
}
}
Python 代码:
import numpy as np
import ctypes
A = np.array(np.linspace(0,4*np.pi,500), dtype=np.float64)
testlib = ctypes.CDLL('./testlib.so')
testlib.loop.argtypes = ctypes.c_double,
testlib.loop.restype = ctypes.c_double
#print(testlib.tan1(3))
我知道在这种情况下使用ctypes.c_double是错误的,但这是我在只有1个值的版本中使用的,我还不知道该用什么来替换它。
请问我该如何实现这个目标?