python - 使用 Cython 从 C 调用 Python 函数:NumPy 数据类型的问题
问题描述
所以我想做的是以下几点:
- 使用数组或 NumPy 数组作为参数调用 C 中的函数
- 在 Cython / Python 中对数组的内容做一些事情,比如元素乘以 2
- 将适当的数据类型返回给 C
我唯一的问题是我不知道如何在 C 中创建一个 NumPy 数组或在我的 cdef 函数中返回一个数组。我当然尝试过在互联网上搜索和阅读,但我发现没有任何真正有用的东西(或者不明白建议的内容)。我尝试了 memoryviews 但我也没有让它工作:
cdef public int[:,:] c_array_to_numpy(int[:,:] input):
cdef int [:,:] memview = input
cdef int[2][3] output
for x in range(memview.shape[0]):
for y in range(memview.shape[1]):
memview[x, y] *= 5
output[x][y] = memview[x][y]
return output
在 C 中它应该看起来像这样
int test[2][3] = {{3, 7, 4}, {8, 5, 9}};
c_array_to_numpy(test);
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%i ", test[i][j]);
}
printf("\n");
}
解决方案
Numpy 内部使用 C 数组,因此您无需进行转换。
我建议首先使用 scipy.weave (它允许你在 python 中嵌入 C 代码),一旦你有这个工作,然后考虑使用适当的库在你的 python 源之外托管 C 代码。
推荐阅读
- jsp - 如何将最大日期设置为当前日期并在日期选择器中隐藏所有即将到来和过去的日期
- azure - 从公共 Internet 访问保护 Azure 存储
- c - 忽略文本文件中的命令行
- javascript - 使用 OpenCV 和 Javascript 在 Canvas 上显示像素数组中的图像
- python - 无法在网络驱动器中运行 jupyter notebook (Windows)
- xamarin.android - 如何删除数组中不需要的行
- python - Alpha vantage API "invalid api call" - 日内和货币数字货币汇率
- amazon-web-services - 来自 S3 的 AWS lambda 部署包
- javascript - 使用 JavaScript 在 simple_form 中显示复选框
- c# - 如何更正只有图像的列表视图项目的命中测试区域(空标签文本)