【python】np.nonzero()、np.amin()和np.amax()

1、用法:np.nonzero(a)

     返回:数组a中非零元素的索引值数组

import numpy as np
a = np.random.uniform(-10, 10, 4)
print(a)
    [ 2.69869382 -8.87937198  4.70100555  1.87901029]
b = np.nonzero(a)
print(b)
    (array([0, 1, 2, 3], dtype=int64),)
#索引元组b是二维数组,第一维是非零元素的序号,第二维是非零元素序号的数据类型。a是一维数组,有4个非零元素,返回4个非零元素的序号

a = [[0, 1, 1],
       [1, 0, 1],
       [1, 1, 0]]
print(a)
    [[0, 1, 1], [1, 0, 1], [1, 1, 0]]
b = np.nonzero(a)
print(b)
    (array([0, 0, 1, 1, 2, 2], dtype=int64), array([1, 2, 0, 2, 0, 1], dtype=int64))
    #a是二维数组,array长度为6,即a有6个非零元素,第一个array是对非零元素的row描述,
    #第二个array是对col的描述。索引元组b一直都是二维数组
print(np.transpose(b))
    [[0 1]
     [0 2]
     [1 0]
     [1 2]
     [2 0]
     [2 1]]
    #调用transpose转置索引序号b元组,非零元素的序号[0,1],即第0行,第一列,以此类推。

2、用法:np.amin(a,axis=0/1)

     返回 :一维数组a中的最小值,二维数组需通过axis指定行或列,获取行或列的最小值,如不指定,则是所有元素的最小值  

import numpy as np

a = [[0, 1, 2],
     [1, 0, 3],
     [1, 4, 0]]
a1 = np.asarray(a, dtype = np.float32)
print(a1[np.nonzero(a1)])
    [ 1.  2.  1.  3.  1.  4.]
    #使用a[np.nonzero(a)]获取a中所有非零值,变一维数组,但需要将a转换成array
print(np.amin(a1[np.nonzero(a1)]))
    1.0
    #获取数组的最小值

#把a1中等于0的值换成a1数组中的最小值
a1[a1==0] = np.amin(a1[np.nonzero(a1)])
print('a1 = ', a1)
    a1 =  [[ 1.  1.  2.]
           [ 1.  1.  3.]
           [ 1.  4.  1.]]

3、用法:np.amax(a, axis=0/1)

返回:一维数组a中的最大值,二维数组需通过axis指定行或列,获取行或列的最大值,如不指定,则是所有元素的最大值 

import numpy as np

a = [[1,4,7],
     [2,5,8],
     [3,6,9]]
b = np.amax(a, axis=0)
print(b)

b = [3,6,9]

 

你可能感兴趣的:(Python函数)