numpy.reshape
をPythonで使用している間に、インデックスの変更を追跡する方法はありますか?numpy.reshapeでインデックスの変更を追跡する
たとえば、形状が(m,n,l,k)
のnumpy配列を形状が(m*n,k*l)
の配列に再構成した場合、現在の[X,Y]
インデックスの初期インデックス([x,y,w,z]
)を取得する方法はありますか?
numpy.reshape
をPythonで使用している間に、インデックスの変更を追跡する方法はありますか?numpy.reshapeでインデックスの変更を追跡する
たとえば、形状が(m,n,l,k)
のnumpy配列を形状が(m*n,k*l)
の配列に再構成した場合、現在の[X,Y]
インデックスの初期インデックス([x,y,w,z]
)を取得する方法はありますか?
はいそれはraveling
とunraveling
指数と呼ばれています、があります。
import numpy as np
arr1 = np.arange(10000).reshape(20, 10, 50)
arr2 = arr.reshape(20, 500)
あなたがインデックスに(10, 52)
(arr2[10, 52]
に相当)の要素をしたいと言うが、arr1
中:
>>> np.unravel_index(np.ravel_multi_index((10, 52), arr2.shape), arr1.shape)
(10, 1, 2)
または他の方向に:
>>> np.unravel_index(np.ravel_multi_index((10, 1, 2), arr1.shape), arr2.shape)
(10, 52)
たとえば、あなたは、2つの配列を持っています
あなたはそれを追跡しませんが、あなたはそれを計算することができます。元のm x n
は新しいm*n
次元にマッピングされます。 n*x+y == X
。しかし、いくつかの多次元ラブ/解明関数(@MSeifert
の回答)を使って検証できます。
In [671]: m,n,l,k=2,3,4,5
In [672]: np.ravel_multi_index((1,2,3,4), (m,n,l,k))
Out[672]: 119
In [673]: np.unravel_index(52, (m*n,l*k))
Out[673]: (2, 12)