Python如何删除numpy数组中指定值的元素

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:]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空中旋转篮球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值