2

我有一个带有浮点数的数组(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 回答