numpy.nonzero()函数

参考文章:https://blog.csdn.net/qq_28773183/article/details/81013226
https://blog.csdn.net/qq_36523839/article/details/82318061

numpy.nonzero函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数.

numpy.nonzero()函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数,很适合用来对数据下标的提取。着重需要强调的是nonzero函数中不仅可以放数值矩阵/行列,同样可以放布尔型(True、False)矩阵/行列,由于这个特性其适用范围更加的广泛和优秀,下面做一个简单的介绍和数据的实践。

  1. 只有DateFrame(即df)中非零元素才会有索引值,那些零值元素没有索引值;
  2. 回的索引数值是一个二维的tuple数组,tuple中包含一维的array数组。每个array数组都是对一维数据判断的描述;
  3. 索引值数组的每一个array均是从一个维度上来描述其索引值。比如,如果df是一个二维数组,则索引值数组有两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值;
  4. 该np.transpose(np.nonzero(df)) 函数能够描述出每一个非零元素在不同维度的索引值;
  5. 通过df[nonzero(df)]得到所有a中的非零值;
  6. nonzero函数中可以适用布尔型矩阵,等同于对0、1矩阵的判断(这个布尔值可以是我们对矩阵的判断条件)。

nonzero(a)
返回数组a中非零元素的索引值数组。

(1)只有a中非零元素才会有索引值,那些零值元素没有索引值;
(2)返回的索引值数组是一个2维tuple数组,该tuple数组中包含一维的array数组。其中,一维array向量的个数与a的维数是一致的。
(3)索引值数组的每一个array均是从一个维度上来描述其索引值。比如,如果a是一个二维数组,则索引值数组有两个array,第一个array从行维度来描述索引值;第二个array从列维度来描述索引值。
(4) 该np.transpose(np.nonzero(x))
函数能够描述出每一个非零元素在不同维度的索引值。
(5)通过a[nonzero(a)]得到所有a中的非零值

一维数组

import numpy as np
a=[1,0,2]
b=np.nonzero(a)
print(b)
import numpy as np
a=[1,0,2]
b=np.nonzero(a)
print(b)
输出结果:(array([0, 2], dtype=int64),)

即a[0],a[2]索引处元素是非零元素。

二维数组

import numpy as np
a=[[0],[1],[2]]
b=np.nonzero(a)
print(b)
输出结果: (array([1, 2], dtype=int64), array([0, 0], dtype=int64))

这里我们可以看出,实际上逻辑上理解的应该是([1,0],[2,0]),也就是第一个array表示非零元素所在的行,第二个array表示非零元素所在的列,分别取对应位置的值组成非零元素的坐标。

import numpy as np
a=np.mat([[0],[1],[2]])
print(len(a.nonzero()[0]))            # 非零元素的个数
输出结果:2
print(a[a.nonzero()])                 # 非零元素的值
输出结果:[[1 2]]

猜你喜欢

转载自blog.csdn.net/tumantou2hao/article/details/88320981