如何獲取numpy的第一個(gè)非0元素索引
我就廢話不多說(shuō)了,
大家還是直接看代碼吧~
import numpy as np arr=np.array([0,0,2,3,0,4]) print((arr!=0).argmax(axis=0)) #2
補(bǔ)充:python獲取二維矩陣的每一行的第一個(gè)非零元素
直接上代碼~
"""
核心函數(shù):
array_1D!=0 :返回一個(gè)True/False序列
array.argmax(axis=0):返回沿axis軸的最大元素的索引,當(dāng)存在多個(gè)相等的最大值時(shí),返回第一個(gè)最大值的索引
"""
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
"""
備注:以下三個(gè)函數(shù)完全等價(jià),個(gè)人比較喜歡最后一個(gè) get_first_non_zeros_2D_2,因?yàn)榭粗容^舒服,也可以方便地?cái)U(kuò)展到更多維度。
"""
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)
"""
打印結(jié)果:
[ 1 -1 1 4 7]
[ 1 -1 1 4 7]
[ 1 -1 1 4 7]
"""
補(bǔ)充:[Python] np.nonzero(ndarray) 返回?cái)?shù)組中不為0的元素的索引
語(yǔ)法:
函數(shù)返回值為tuple元組類(lèi)型,tuple內(nèi)的元素?cái)?shù)目與ndarray維度相同。
np.nonzero(ndarray)
先強(qiáng)調(diào)一點(diǎn),數(shù)組的索引是從0開(kāi)始。
示例:
# 1維數(shù)組 a = [0,2,3] b = np.nonzero(a) print(b) # (array([1, 2], dtype=int64),) # 說(shuō)明:索引1和索引2的位置上元素的值非零。 # 2維數(shù)組 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)) # 說(shuō)明: # tuple的每一個(gè)元素,從一個(gè)維度來(lái)確定非零元素的位置。所以對(duì)于二維數(shù)組,tuple就有兩個(gè)元素。 # tuple的元素的內(nèi)容是該維度不為0的元素的位置,排列順序是數(shù)組遍歷的順序。 # 比如確定第一個(gè)非零元素的位置:先找tuple內(nèi)的第一個(gè)元素 array([0, 2], dtype=int64)的第一個(gè)元素,為0,說(shuō)明第一個(gè)非零元素在第一行; # 之后tuple內(nèi)的第二個(gè)元素 array([2, 2], dtype=int64)的第一個(gè)元素,為2,說(shuō)明第一個(gè)非零元素在第三列。 # 3維數(shù)組 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)) # 說(shuō)明:由于a是3維數(shù)組,因此,索引值數(shù)組有3個(gè)一維數(shù)組,分別代表層、行、列。 # 查找原理和二維數(shù)組一致,不再贅述。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python遍歷目錄下所有文件的五種實(shí)現(xiàn)方法
本文主要介紹了python遍歷目錄下所有文件的五種實(shí)現(xiàn)方法,包含os.walk(),os.scandir(),os.listdir(),glob模塊和osqp模塊這幾種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
window環(huán)境pip切換國(guó)內(nèi)源(pip安裝異常緩慢的問(wèn)題)
這篇文章主要介紹了window環(huán)境pip切換國(guó)內(nèi)源(pip安裝異常緩慢的問(wèn)題),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
利用Python計(jì)算質(zhì)數(shù)與完全數(shù)的方法實(shí)例
這篇文章主要介紹了利用Python計(jì)算質(zhì)數(shù)與完全數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
深入理解python虛擬機(jī)如何實(shí)現(xiàn)閉包
當(dāng)能夠從設(shè)計(jì)者的層面去理解閉包就再也不用死記硬背一些閉包的概念了,所以本文就來(lái)從虛擬機(jī)層面和大家一起討論函數(shù)閉包是如何實(shí)現(xiàn)的2023-10-10
Pandas時(shí)間序列基礎(chǔ)詳解(轉(zhuǎn)換,索引,切片)
今天小編就為大家分享一篇Pandas時(shí)間序列基礎(chǔ)詳解(轉(zhuǎn)換,索引,切片),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python?if?else語(yǔ)句對(duì)縮進(jìn)的要求
這篇文章主要介紹了Python?if?else語(yǔ)句對(duì)縮進(jìn)的要求,前面的一篇文章展示了選擇結(jié)構(gòu)的三種基本形式,并給出了實(shí)例演示,這篇文章基于上一篇內(nèi)容繼續(xù)對(duì)Python?if?else語(yǔ)句對(duì)縮進(jìn)進(jìn)行描述,需要的小伙伴可以參考一下2022-03-03
淺談Django中的數(shù)據(jù)庫(kù)模型類(lèi)-models.py(一對(duì)一的關(guān)系)
今天小編就為大家分享一篇淺談Django中的數(shù)據(jù)庫(kù)模型類(lèi)-models.py(一對(duì)一的關(guān)系),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python深度強(qiáng)化學(xué)習(xí)之DQN算法原理詳解
DQN算法是DeepMind團(tuán)隊(duì)提出的一種深度強(qiáng)化學(xué)習(xí)算法,在許多電動(dòng)游戲中達(dá)到人類(lèi)玩家甚至超越人類(lèi)玩家的水準(zhǔn),本文就帶領(lǐng)大家了解一下這個(gè)算法,快來(lái)跟隨小編學(xué)習(xí)一下2021-12-12

