2017-02-02 3 views
0

2Dのnumpy配列を持っていて、そのコアを抽出するためにスライスしたとします。大きなフレームから内側のフレームを切り取ったのと同じようにフレームPython:2Dアレイをより大きな2D配列にマッピングするための一般的なルール

大きなフレーム:

In[0]: import numpy 
In[1]: a=numpy.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14],[15,16,17,18,19]]) 
In[2]: a 
Out[2]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19]]) 

インナーフレーム:

In[3]: b=a[1:-1,1:-1] 
Out[3]: 
array([[ 6, 7, 8], 
     [11, 12, 13]]) 

私の質問:私は元の配列abに各値の位置を取得する場合、ありますこれ以上のアプローチがありますか?

c=numpy.ravel(a) #This will flatten my values in a, so to have a sequential order 
d=numpy.ravel(b) #Each element in b will tell me what its corresponding position in a was 
+2

私は私はあなたがあなたのプログラムが何をしたいのか理解していません。あなたは何を出力として持ちたいのですか?あなたの質問の終わりのリスティングは、本当に 'a'の' b'要素の位置を計算しませんか、それとも私はそれを見ることができませんか? – jotasi

+0

私の出力は、 'a'の内部フレームの値の位置を含む1D配列またはリストです。 – FaCoffee

+0

あなたが得るのは、平坦な配列としてのaとbの要素です。それではポジションはどうですか?それらは平坦な配列内の位置のようなものかもしれませんが、あなたの要素が0〜19の数字であるためです。私の理解のために、位置は要素6では '[1,1]'のようになり、番号6ではなくなります。あなたは要素の「位置」を考慮して何を精緻化できますか? – jotasi

答えて

1
y, x = np.ogrid[1:m-1, 1:n-1] 
np.ravel_multi_index((y, x), (m, n)) 
関連する問題