我就廢話不多說了,
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...