如何在NumPy中实现类Fortran式负索引以适配物理与数学方程?
在NumPy中实现自定义起始索引的负索引功能
与大多数采用零基索引的语言不同,Fortran允许指定特定的索引范围:
! 包含10个元素的数组 double precision arr(-8:1) arr(-8) = 0 ! 第一个元素 arr( 0) = 1 ! 倒数第二个元素 arr( 1) = -1 ! 最后一个元素
在C语言中,可通过将指针指向数组的第9个元素(零基索引)实现相同的索引效果:
int _arr[10]; int *arr = &_arr[8]; arr[-8] = 0; arr[ 0] = 1; arr[ 1] = -1;
能否在NumPy数组中实现类似的自定义负索引功能?这在实现常涉及负索引的数学与物理方程时会非常实用,相比传统的索引偏移方法,能直接对应方程中的索引表述,提升代码可读性并降低出错概率。
一种不尽人意的解决方案
可以通过重载ndarray的__getitem__方法来尝试实现,但该方案存在以下明显问题:
- 考虑到NumPy支持的多种索引方式(切片、布尔索引、整数数组索引等),实现过程会相当繁琐;
- 重载方法会给索引操作带来显著的性能开销,影响NumPy原本的高效计算特性;
- 子类化
ndarray本身存在一定风险,可能与NumPy的内部优化或其他第三方库产生兼容性问题。
内容的提问来源于stack exchange,提问作者MrPisarik
相关产品推荐
相关产品推荐

