如何獲取numpy的第乙個非0元素索引

2022-10-04 12:48:12 字數 3056 閱讀 4767

我就廢話不多說了,

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(

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

bylweznnv = 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.www.cppcns.comnonzero(nda程式設計客棧rray)

先強調一點,陣列的索引是從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=intwww.cppcns.com64))

# 說明:

# 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元素索引

本文位址:

0 第乙個Django程式

建立django專案命令 django admin startproject djangowebtest2啟動django測試環境 修改urls.py from django.conf.urls import url from django.contrib import admin from dja...

php 如何獲取陣列第乙個值

reset p程式設計客棧hp 3,php 4,php 5 reset 將陣列的內部指標指向第乙個單元 說明mixed reset array array reset 程式設計客棧 將 array 的內部指標倒回到第乙個單元並返回第乙個陣列單元的值,如果陣列為空則返回 false。例 1.reset...

Excel匯入時,如何獲取第乙個Sheet名稱

怎樣才能獲得excel中各個sheet的名稱呢?這樣就能動態的選中返回哪個sheet的資料,即使使用者更改了名稱也不怕,完全可以把所有sheet的名稱列出來供使用者選擇 根據excel的檔案的路徑提取其中表的資料 excel檔案的路徑 private void string path 包含excel...