1.使用场景

删除数组中指定值的元素,比如我们读取到遥感影像背景值,我们不要使用这些值进行计算,那么我们可以直接删除掉这些背景值不参与计算

2.删除方法

本来想使用内置函数进行删除的,发现np.delete内置函数只能单行删除指定索引的值,而不是删除所有指定值。如:

indexs=[1]  #需要删除要素的索引
ndvi_removed_array=np.delete(ndvi_reshp_array,indexs,0) #执行删除 只删除了第2个数据

使用list中的remove函数的时候也只能删除一行,也没找到其他可用函数,因此使用迭代逐行删除了。这个效率就很低下了,读取的速度极慢,数据有7000多万个,需要计算较长时间,也不可取。

 #迭代删除,效率很低下
        for i in range(n):
            if ndvi_reshp_array[i] ==-19999:
                index=[i]
                np.delete(ndvi_reshp_array,index,0)

3.优化方法

首先对数据先进行展平,然后排序。开始我把这个数据通过resahpe(n,1)塑性然后使用sort()h函数排序,发现一直不起作用,后来想到这个实际上是一个二维数组,使用这个函数就不能起作用了,因此采用数据展平flatten()函数的方法再使用sort()函数。

ndvi_reshp_array = ndvi_nparray.flatten(('c'))
ndvi_reshp_array.sort()

读取数据中指定值x的个数:

t_index = np.sum(ndvi_reshp_array == x)

我的这个数据x是数组中最小的一个数字,因此这个x的个数就是起始索引值,可以直接采用截取数组的方法去掉所有x值,即:

ndvi_remove_array=ndvi_reshp_array[t_index:]

如果不是最小或者最大值,那就需要继续检索该数值第一个和最后一个出现的位置了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐