2012-07-06 30 views
2

我有一個浮點數組(2000 * 2000),我想對數字進行分類。 因此,10到20之間的所有數字都應該用15代替,20 - 60之間的數字應該用40代替,等等。用數值c替換浮點數值a到b大數組

我用一些if語句編寫了一些循環遍歷所有行和列的東西......但它需要永遠運行大型數組。有人知道如何加快速度嗎?

for a in range(grid.shape[0]): #grid is an array 
    for b in range(grid.shape[1]):  
     for c in range(len(z)): 
      if z[c][0] <= grid[a][b] < z[c][1]: # z is a list containing [lower,upper,replace_value] 
       grid[a][b]=z[c][2] 
+0

這是什麼版本的Python? – Michael0x2a 2012-07-06 17:49:51

回答

1

會是這樣的工作嗎?

>>> import numpy as np 
>>> grid = np.random.random((5,5)) * 100 
>>> z = np.array([0, 10, 20, 60, 100.]) 
>>> replace_value = np.array([np.nan, 5., 15., 40., 80.]) 

>>> grid = replace_value[z.searchsorted(grid)] 
>>> print grid 
[[ 15. 40. 80. 80. 15.] 
[ 80. 40. 15. 80. 80.] 
[ 15. 80. 5. 15. 40.] 
[ 40. 80. 5. 5. 80.] 
[ 40. 5. 80. 5. 40.]] 
+0

thx!從幾分鐘到少於一秒:) – user1507422 2012-07-06 18:47:09