2017-02-02 30 views
0

假設您有一個2D numpy數組,您已將其切片以提取其核心,,就好像您正在從較大的框架Python:將二維數組映射到較大的二維數組上的一般規則

較大的幀:

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]]) 

我的問題:如果我想檢索b原始數組a中的每個值的位置,是有比這更好的方法嗎?

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'的內部框架中值的位置。 – 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))