2

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

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

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

只是想知道是否有更快的方法来做到这一点,使用 Python/Numpy 切片语法。

4

2 回答 2

1

利用 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 中不应使用太多内存,因为它只是原始数组的视图) 然后使用负索引方法。

于 2013-06-21T14:27:17.807 回答
0

你可以尝试一些类似于:

n = 10
a = range(n)
for i in range(n):
   print a[i-1],a[i],a[i-(n-1)]

我不知道“+-”与“%”的性能,但我相信这比使用 % 更快。

于 2013-06-21T14:20:27.417 回答