2

float を持つ配列 (2000 * 2000) があり、数値を分類したいと考えています。したがって、10 から 20 までの数字はすべて 15 に置き換え、20 から 60 までの数字はすべて 40 に置き換える必要があります。

いくつかの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]
4

1 に答える 1

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.]]
于 2012-07-06T18:00:14.440 に答える