numpy配列を使用しているので、派手なインデックスを使用することをお勧めします。
a = np.arange(27)
indices = [0, -1]
b = a[indices] # array([0, 26])
3Dの場合:
vertices = [(0,0,0),(0,0,-1),(0,-1,0),(0,-1,-1),(-1,-1,-1),(-1,-1,0),(-1,0,0),(-1,0,-1)]
indices = list(zip(*vertices)) #Can store this for later use.
a = np.arange(27).reshape((3,3,3)) #dummy array for testing. Can be any shape size :)
vertex_values = a[indices].reshape((2,2,2))
最初にすべての頂点を書き留めます(ただし、itertools
これをN次元にスケールアップできる賢い方法があると思いますが...)。頂点を指定する順序は、出力配列に含まれる順序です。次に、頂点のリストを(を使用して)「転置」してzip
、すべてのxインデックスが一緒になり、すべてのyインデックスが一緒になるようにします(これがnumpyが気に入っている方法です)。この時点で、そのインデックス配列を保存し、ボックスの隅が必要なときにいつでもそれを使用して配列にインデックスを付けることができます。結果を2x2x2配列に簡単に再形成できます(ただし、私が持っている順序はおそらく希望する順序ではありません)。