温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么获取numpy的第一个非0元素索引

发布时间:2022-02-23 15:24:22 来源:亿速云 阅读:288 作者:小新 栏目:开发技术

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

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

大家还是直接看代码吧~

import numpy as np arr=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轴的最大元素的索引,当存在多个相等的最大值时,返回第一个最大值的索引 """ import numpy as np   array_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]])     def get_first_non_zero_1D(array_1D):     first_non_zero = array_1D[(array_1D!=0).argmax(axis=0)]     return first_non_zero   """ 备注:以下三个函数完全等价,个人比较喜欢最后一个 get_first_non_zeros_2D_2,因为看着比较舒服,也可以方便地扩展到更多维度。 """   def get_first_non_zeros_2D(array_2D):     first_non_zeros = np.array([get_first_non_zero_1D(array_2D[i]) for i in range(array_2D.shape[0])])     return first_non_zeros   def get_first_non_zeros_2D_1(array_2D):     first_non_zeros = []     for i in range(array_2D.shape[0]):         arr = array_2D[i,:]         first_non_zero = arr[(arr!=0).argmax(axis=0)]         first_non_zeros.append(first_non_zero)     return np.array(first_non_zeros)   def get_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]] for i in range(array_2D.shape[0])])     first_non_zeros = array_2D[range(array_2D.shape[0]),none_zero_index]     return first_non_zeros   b = 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 -1  1  4  7] [ 1 -1  1  4  7] [ 1 -1  1  4  7] """

补充:[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) # [[[0 1] #   [1 0]] #  #  [[0 1] #   [1 0]] #  #  [[0 0] #   [1 0]]] 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元素索引”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI