2017-01-25 7 views
4

numpy.reshapeをPythonで使用している間に、インデックスの変更を追跡する方法はありますか?numpy.reshapeでインデックスの変更を追跡する

たとえば、形状が(m,n,l,k)のnumpy配列を形状が(m*n,k*l)の配列に再構成した場合、現在の[X,Y]インデックスの初期インデックス([x,y,w,z])を取得する方法はありますか?

答えて

3

はいそれはravelingunraveling指数と呼ばれています、があります。

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つの配列を持っています
1

あなたはそれを追跡しませんが、あなたはそれを計算することができます。元の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) 
関連する問題