我有一个 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 中不应使用太多内存,因为它只是原始数组的视图) 然后使用负索引方法。
你可以尝试一些类似于:
n = 10
a = range(n)
for i in range(n):
print a[i-1],a[i],a[i-(n-1)]
我不知道“+-”与“%”的性能,但我相信这比使用 % 更快。