您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:如何获取numpy的第一个非0元素索引

51自学网 2021-10-30 22:40:33
  python
这篇教程如何获取numpy的第一个非0元素索引写得很实用,希望能帮到您。

我就废话不多说了,

大家还是直接看代码吧~

import numpy as nparr=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个一维数组,分别代表层、行、列。# 查找原理和二维数组一致,不再赘述。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。


Python 如何读取字典的所有键-值对
Python机器学习之KNN近邻算法
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。