我在C ++中编写了Python 3的扩展
我的模块能够处理像[1.0, 0.0, 0.0]
这样的数组。
我也想添加对numpy数组的支持。
我使用以下代码处理数组:
PyObject * MyFunction(PyObject * self, PyObject * args) {
PyObject * list;
if (!PyArg_ParseTuple(args, "O!:MyFunction", PyList_Type, &list)) {
return 0;
}
int count = (int)PyList_Size(list);
for (int i = 0; i < count; ++i) {
double value = PyFloat_AsDouble(PyList_GET_ITEM(list, i));
// ...
}
}
我想要一个可以迭代的函数:np.array([2,3,1,0])
TL; DR:
Numpy等效于:
PyList_Type
PyList_Size
PyList_GET_ITEM
或PyList_GetItem
答案 0 :(得分:1)
首先,没有Math.clamp(x, lower, upper)
等效于:
numpy
实现buffer interface,因此可以写:
numpy.array
const char * data;
int size;
PyArg_ParseTuple(args, "y#:MyFunction", &data, &size);
使用numpy.array([1.0, 0.0, 0.0])
精度:
double
完整示例:
<强> C ++ 强>
double * array = (double *)data;
int length = size / sizeof(double);
<强>的Python 强>
PyObject * MyFunction(PyObject * self, PyObject * args) {
const char * data;
int size;
if (!PyArg_ParseTuple(args, "y#:MyFunction", &data, &size)) {
return 0;
}
double * content = (double *)data;
int length = size / sizeof(double);
for (int i = 0; i < length; ++i) {
double value = content[i];
// ...
}
Py_RETURN_NONE;
}