Python学习之numpy中的nonzero()

一、nonzero(a) 
nonzero函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数。它的返回值是一个长度为a.ndim(数组a的轴数)的元组元组的每个元素都是一个整数数组,其值为非零元素的下标在对应轴上的值。

(1)只有a中非零元素才会有索引值,那些零值元素没有索引值;

(2)返回的索引值数组是一个2维tuple数组,该tuple数组中包含一维的array数组。其中,一维array向量的个数与a的维数是一致的。

(3)索引值数组的每一个array均是从一个维度上来描述其索引值。比如,如果a是一个二维数组,则索引值数组有两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值。

(4)transpose(np.nonzero(x))函数能够描述出每一个非零元素在不同维度的索引值。

(5)通过a[nonzero(a)]得到所有a中的非零值


二、实例

 1、一维数组


#a是一位数组
a=[0,2,3]
b=np.nonzero(a)
num=np.array(b).ndim#非0值得个数
print(num)
print(b)

输出:

Python学习之numpy中的nonzero()

说明:索引1和索引2的位置上元素的值非零

2、二维数组(注意与一维数组进行比对)

#a是二维数组
a=np.array([[0,0,3],[0,9,0],[0,0,0]])
#这是输出非0元素位置
print(np.nonzero(a))
#这是求非0元素个数
print(np.array(b).ndim)
#分别从每一个维度描述索引值
add=np.transpose(np.nonzero(a))
print(add)

输出:

Python学习之numpy中的nonzero()

第一个(array([0, 1], dtype=int64), array([2,1], dtype=int64))          其中array[0,1]从row值上对每个元素描述

array[2,1]从col值上对每个元素进行描述。

第二个2是非0元素个数;

第三个transpose()函数输出的是对第一得到的索引进行维度描述;输出的是两个非0元素的索引 位置;

即3的索引是[0,2],9的索引是[1,1]

举例:

Python学习之numpy中的nonzero()

3、三维数组这里不研究

三、

通过上面我们发现通过.nonzero()函数可以得到数组中行和列所在索引。

#构造二维数组
rratings=np.array([[1,0,0],[0,9,8],[0,0,5],[1,3,1]])
print(rratings)

输出: 

Python学习之numpy中的nonzero()

 

print(rratings.nonzero())

输出: 

Python学习之numpy中的nonzero()

 

print(rratings.nonzero()[0])

输出:

Python学习之numpy中的nonzero()

 

#表示输出索引为1的这一行的元素值

print(rratings[1,:])

输出:

Python学习之numpy中的nonzero()

 

#这时候这个输出的是列
print(rratings[1,:].nonzero()[0])

#注意此时输出[1]不是列,会报错
#print(rratings[1,:].nonzero()[1])

输出:(此时输出的是列数不是行数)

Python学习之numpy中的nonzero()

 

以上

Python学习之numpy中的nonzero()

 

对比:当用.matrix函数时

rratings[1,:].nonzero()[1]

才能正确表示选中某一行所在的列

Python学习之numpy中的nonzero()

我们引出下一篇,array与matrix函数的区别

https://blog.****.net/likeyou1314918273/article/details/89598158