Python如何删除numpy数组中指定值的元素
Posted 空中旋转篮球
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:]
如果不是最小或者最大值,那就需要继续检索该数值第一个和最后一个出现的位置了。
以上是关于Python如何删除numpy数组中指定值的元素的主要内容,如果未能解决你的问题,请参考以下文章