这篇文章主要为大家展示了“怎么获取numpy的第一个非0元素索引”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么获取numpy的第一个非0元素索引”这篇文章吧。

numpy的使用场景之一就是获取二维矩阵的每一行的第一个非零元素,这样的场景numpy也是有提供一个方法来供用户使用的

大家还是直接看代码吧~

importnumpyasnparr=np.array([0,0,2,3,0,4])print((arr!=0).argmax(axis=0))#2

补充:python获取二维矩阵的每一行的第一个非零元素

直接上代码~

"""核心函数:array_1D!=0:返回一个True/False序列array.argmax(axis=0):返回沿axis轴的最大元素的索引,当存在多个相等的最大值时,返回第一个最大值的索引"""importnumpyasnparray_1D=np.array([0,1,0,-1,0])array_2D=np.array([[0,1,0,-1,0],[0,0,-1,0,1],[0,1,-1,0,1],[4,0,-1,0,1],[7,16,-1,0,1]])defget_first_non_zero_1D(array_1D):first_non_zero=array_1D[(array_1D!=0).argmax(axis=0)]returnfirst_non_zero"""备注:以下三个函数完全等价,个人比较喜欢最后一个get_first_non_zeros_2D_2,因为看着比较舒服,也可以方便地扩展到更多维度。"""defget_first_non_zeros_2D(array_2D):first_non_zeros=np.array([get_first_non_zero_1D(array_2D[i])foriinrange(array_2D.shape[0])])returnfirst_non_zerosdefget_first_non_zeros_2D_1(array_2D):first_non_zeros=[]foriinrange(array_2D.shape[0]):arr=array_2D[i,:]first_non_zero=arr[(arr!=0).argmax(axis=0)]first_non_zeros.append(first_non_zero)returnnp.array(first_non_zeros)defget_first_non_zeros_2D_2(array_2D):none_zero_index=(array_2D!=0).argmax(axis=1)#first_non_zeros=np.array([array_2D[i,none_zero_index[i]]foriinrange(array_2D.shape[0])])first_non_zeros=array_2D[range(array_2D.shape[0]),none_zero_index]returnfirst_non_zerosb=get_first_non_zeros_2D(array_2D)c=get_first_non_zeros_2D_1(array_2D)d=get_first_non_zeros_2D_2(array_2D)print(b)print(c)print(d)"""打印结果:[1-1147][1-1147][1-1147]"""

补充:[Python] np.nonzero(ndarray) 返回数组中不为0的元素的索引

语法:

函数返回值为tuple元组类型,tuple内的元素数目与ndarray维度相同。

np.nonzero(ndarray)

先强调一点,数组的索引是从0开始。

示例:

#1维数组a=[0,2,3]b=np.nonzero(a)print(b)#(array([1,2],dtype=int64),)#说明:索引1和索引2的位置上元素的值非零。#2维数组a=np.array([[0,0,3],[0,0,0],[0,0,9]])b=np.nonzero(a)print(b)#(array([0,2],dtype=int64),array([2,2],dtype=int64))#说明:#tuple的每一个元素,从一个维度来确定非零元素的位置。所以对于二维数组,tuple就有两个元素。#tuple的元素的内容是该维度不为0的元素的位置,排列顺序是数组遍历的顺序。#比如确定第一个非零元素的位置:先找tuple内的第一个元素array([0,2],dtype=int64)的第一个元素,为0,说明第一个非零元素在第一行;#之后tuple内的第二个元素array([2,2],dtype=int64)的第一个元素,为2,说明第一个非零元素在第三列。#3维数组a=np.array([[[0,1],[1,0]],[[0,1],[1,0]],[[0,0],[1,0]]])print(a)#[[[01]#[10]]##[[01]#[10]]##[[00]#[10]]]b=np.nonzero(a)print(b)#(array([0,0,1,1,2],dtype=int64),array([0,1,0,1,1],dtype=int64),array([1,0,1,0,0],dtype=int64))#说明:由于a是3维数组,因此,索引值数组有3个一维数组,分别代表层、行、列。#查找原理和二维数组一致,不再赘述。

以上是“怎么获取numpy的第一个非0元素索引”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!