2014-05-10 45 views
1

我開始在Python和...編碼... 我試圖做一個拒絕特殊值的二維數組計算(我知道它的座標在該陣列)與array_valuesreject計算二維數組拒絕特殊值(知道指數)

作爲例子:

import numpy as np 

#A array of the points I must reject 
#The first column reprensents the position in Y and the second the position in X 
#of 2D array below 

array_valuesreject = np.array([[1.,2.],[2.,3.], [3.,5.],[10.,2.]]) 

#The 2D array : 

test_array = np.array([[ 3051.11, 2984.85, 3059.17], 
     [ 3510.78, 3442.43, 3520.7 ], 
     [ 4045.91, 3975.03, 4058.15], 
     [ 4646.37, 4575.01, 4662.29], 
     [ 5322.75, 5249.33, 5342.1 ], 
     [ 6102.73, 6025.72, 6127.86], 
     [ 6985.96, 6906.81, 7018.22], 
     [ 7979.81, 7901.04, 8021. ], 
     [ 9107.18, 9021.98, 9156.44], 
     [ 10364.26, 10277.02, 10423.1 ], 
     [ 11776.65, 11682.76, 11843.18]]) 


#So I would like to apply calculation on 2D array without taking account of the 
#list of coordinates defined above and i would like to keep the same dimensions array! 
#(because it s represented a matrix of detectors) 

#Create new_array to store values 
#So I try something like that....: 

new_array = numpy.zeros(shape=(test_array.shape[0],test_array.shape[1])) 

for i in range(test_array.shape[0]): 
    if col[i] != (array_valuesreject[i]-1): 
     for j in range(test_array.shape[1]): 
     if row[j] != (array_valuesreject[j]-1): 
      new_array[i,j] = test_array[i,j] * 2 

感謝您的幫助!

回答

2

這是一個很好的情況下使用掩碼數組。你要掩蓋你想在計算中忽略的座標:

#NOTE it is an array of integers 
array_valuesreject = np.array([[1, 2], [2, 2], [3, 1], [10, 2]]) 
i, j = array_valuesreject.T 

mask = np.zeros(test_array.shape, bool) 
mask[i,j] = True 
m = np.ma.array(test_array, mask=mask) 

在打印屏蔽數組m

masked_array(data = 
[[3051.11 2984.85 3059.17] 
[3510.78 3442.43 --] 
[4045.91 3975.03 --] 
[4646.37 -- 4662.29] 
[5322.75 5249.33 5342.1] 
[6102.73 6025.72 6127.86] 
[6985.96 6906.81 7018.22] 
[7979.81 7901.04 8021.0] 
[9107.18 9021.98 9156.44] 
[10364.26 10277.02 10423.1] 
[11776.65 11682.76 --]], 
      mask = 
[[False False False] 
[False False True] 
[False False True] 
[False True False] 
[False False False] 
[False False False] 
[False False False] 
[False False False] 
[False False False] 
[False False False] 
[False False True]], 
     fill_value = 1e+20) 

,並計算將僅用於非屏蔽值來執行,你可以這樣做:

new_array = m * 2 

得到你想要的。

+0

@ user3601754索引從'0'開始 –