Skip to main content
 首页 » 编程设计

python之是否有等同于 (i+1)%N 的 Python 切片符号

2025年05月04日7qq78292959

我有一个 Python numpy 数组,用于模拟环形边界条件。

例如,在i = N-1的边界处,i+1变为0。

我正在使用 a[(i+1)%N, (j+1)%N] 访问最近的邻居,因此索引会自动环绕。

只是想知道是否有更快的方法来执行此操作,使用 Python/Numpy 切片语法。

请您参考如下方法:

利用 Python 的负索引。

a[(i+1)-N, (j+1)-N] 

等同于您使用模数的版本。证明:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> for i in range(len(a)): 
    print(a[(i+1)%len(a)], a[i+1-len(a)]) 
 
 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
1 1 

如果边界小于数组轴的长度,您可以使用正确边界的数组切片(这不应该在 numpy 中使用太多内存,因为它只是一个 View 原始数组),然后使用负索引方法。