インデックスがエッジをラップする配列から(正方形の)セクションを返そうとしています。いくつかのインデックス作成を調整する必要がありますが、うまくいきますが、最後の 2 行のコードは同じ結果になると思いますが、そうでないのはなぜですか? numpy は最後の行をどのように解釈しますか?
おまけの質問として、このアプローチはひどく非効率的ですか? product
ラップアラウンドするように範囲をモジュロする必要があるため、を使用しています。それ以外の場合a[imin:imax, jmin:jmax, :]
はもちろん、を使用します。
import numpy as np
from itertools import product
i = np.arange(-1, 2) % 3
j = np.arange(1, 4) % 3
a = np.random.randint(1,10,(3,3,2))
print a[i,j,:]
# Gives 3 entries [(i[0],j[0]), (i[1],j[1]), (i[2],j[2])]
# This is not what I want...
indices = list(product(i, j))
print indices
indices = zip(*indices)
print 'a[indices]\n', a[indices]
# This works, but when I'm explicit:
print 'a[indices, :]\n', a[indices, :]
# Huh?