我有一个 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 原始数组),然后使用负索引方法。
关于python - 是否有等同于 (i+1)%N 的 Python 切片符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227736/