如何獲取numpy的第一個非0元素索引
更新時間:2021年05月14日 09:55:20 作者:upDiff
這篇文章主要介紹了如何獲取numpy的第一個非0元素索引,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
我就廢話不多說了,
大家還是直接看代碼吧~
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個一維數組,分別代表層、行、列。 # 查找原理和二維數組一致,不再贅述。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
python打印9宮格、25宮格等奇數格 滿足橫豎斜相加和相等
這篇文章主要為大家詳細介紹了python打印9宮格、25宮格等奇數格,滿足橫豎斜相加和相等,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決
這篇文章主要給大家介紹了關于不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決方法,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟
本文主要介紹了python如何將自己的包上傳到PyPi并可通過pip安裝的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05