python 之 np.nonzero() 和 np.amin()

1、用法:np.nonzero(a)

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

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

     返回 :一维数组a中的最小值,二维数组需通过axis指定行或列,获取行或列的最小值 

>>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行,第一列,以此类推。

>>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.]]

猜你喜欢

转载自blog.csdn.net/weixin_42338058/article/details/83987821
np