トロイダル境界条件を使用したシミュレーションに使用している 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)]
「+-」対「%」のパフォーマンスはわかりませんが、%よりも速いと思います。