python - 为 n 维数组推广 Cython 代码
问题描述
我正在编写很多需要泛化到n维的 Cython 代码(大多数情况下这将是n = 1、2 或 3)。
以下面的代码为例,这是对元素的简单求和。
cimport cython
from cython cimport floating
cpdef floating nd_sum(floating [:, :, :] arr):
cdef:
Py_ssize_t [3] N = [arr.shape[0], arr.shape[1], arr.shape[2]]
Py_ssize_t [3] i
floating total = 0
for i[0] in range(N[0]):
for i[1] in range(N[1]):
for i[2] in range(N[2]):
total += arr[i[0], i[1], i[2]]
return total
从概念上讲,对n维的泛化是非常明显的。但是,我似乎无法在代码中实现它。我讨厌必须为n = 1,2,3 的每种情况复制此代码,...
一般来说,我还需要能够访问每个维度中每个数组元素的邻居(想想n维内核卷积等),这使得像展平数组这样的事情变得不可行。
我的主要问题是:
如何告诉 Cython 期望具有任意维度的数组作为输入?我想我可能不得不求助于
np.ndarray
这里......给定n 个索引的数组,如何从n维数组中获取元素?
如何概括n嵌套循环的构造?递归在这里似乎是不可避免的,但是我如何才能以这种方式访问所有n索引?
解决方案
推荐阅读
- c# - 我如何循环对象数组并使用 Linq 将每个对象的属性添加到变量中?
- c - 如何使用C在netfilter中打印特定IP地址的数据包信息?
- android-emulator - 运行android模拟器后其他程序出现延迟
- typescript - `babel-plugin-react-css-modules` Typescript 类型检查
- angular - IONIC底部带有固定按钮的滚动列表页面
- lua - 在 LUA 中获取范围之间的随机数列表,但每个数字允许 x 组重复项
- html - 拒绝加载图像 'unsafe:data:.image-type;base64, [base64String]'
- php - 如何从每个月分别查询 12 个月的数据 laravel
- jquery - 使用 Jquery 在 Matrilize css 中选择特定选项卡
- javascript - mapDispatchToProps 函数不起作用 React Redux