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