numpy使用汇总

1、统计nan值出现次数

numpy 中的nan为not a number,表示一个不确定的数,所以两个nan是不相等的。

可以使用count_nonzero函数实现

import numpy as np 

data=np.array([1,2,3,np.nan])

nan_num=np.count_nonzero(data!=data)

print(nan_num)

代码运行结果:
在这里插入图片描述
参考自关于numpy的nan值处理

2、替换值

比如说想把某一列的2替换成3,pandas里面可以用map(dict)替换,numpy可以用bool值替换,代码如下:

>>> import numpy as np
>>> a=np.array([2,2,4,5,4])
>>> print(a)
[2 2 4 5 4]
>>> a[a==2]=3
>>> print(a)
[3 3 4 5 4]
>>> 

参考自python中Numpy中的替代值

3、提取矩阵的一行或一列

这个操作是根据切片实现的(和python中list的切片操作类似),可以根据需要提取多行和多列。

>>> import numpy as np
>>> a=np.random.randint(25,size=(3,3))
>>> a
array([[11,  6,  9],
       [18, 14,  8],
       [ 4,  3,  5]])
>>> 
# 提取第2列
>>> a[:,1]
array([ 6, 14,  3])
#提取第2、3列
>>> a[:,1:]
array([[ 6,  9],
       [14,  8],
       [ 3,  5]])
#提取一行和多行
>>> a[1,:]
array([18, 14,  8])
>>> a[1:,:]
array([[18, 14,  8],
       [ 4,  3,  5]])

参考博客:
Python numpy 提取矩阵的某一行或某一列

4、numpy增删改查

4.1 查和改

numpy既可以改变单个值,也可以改变多个值(某行、某列或者某个范围),改变多个值的时候,要注意赋值行列数和要替换的内容行列相同。

>>> a
array([[11,  6,  9],
       [18, 14,  8],
       [ 4,  3,  5]])
#改变单个值
>>> a[0][0]=1
>>> a
array([[ 1,  6,  9],
       [18, 14,  8],
       [ 4,  3,  5]])
# 改变第一行的值
>>> a[0,:]=[1,2,3]
>>> a
array([[ 1,  2,  3],
       [18, 14,  8],
       [ 4,  3,  5]])
# 改变第一行后面两个值
>>> a[0,1:3]=[4,5]
>>> a
array([[ 1,  4,  5],
       [18, 14,  8],
       [ 4,  3,  5]])
>>> 

4.2 增

因为比较懒,那就一个函数解决吧。

numpy.concatenate((a1, a2, ...), axis=0, out=None, dtype=None, casting="same_kind")

参数几乎在前面都能找到,不再赘述,直接给出几个示例:

>>> a
array([[3, 0],
       [3, 2],
       [3, 3]])
>>> c
array([[1, 1],
       [1, 1],
       [1, 1]])
#添加列
>>> np.concatenate((a,c),axis=1)
array([[3, 0, 1, 1],
       [3, 2, 1, 1],
       [3, 3, 1, 1]])
#添加行
>>> np.concatenate((a,c),axis=0)
array([[3, 0],
       [3, 2],
       [3, 3],
       [1, 1],
       [1, 1],
       [1, 1]])
#一维添加
>>> np.concatenate((a,c),axis=None)
array([3, 0, 3, 2, 3, 3, 1, 1, 1, 1, 1, 1])
>>> 

几乎能满足所有需求。

4.3 删

5、numpy随机数

numpy1.17版本后对随机数生成提供了新方法,我自己总结了篇博客,numpy1.1.7版本后随机数新的生成方法总结,传统的随机数的生成方法,可以查看这篇博客Python的numpy库中rand(),randn(),randint(),random_integers()等random系函数的使用

6、矩阵常见运算

6.1 矩阵乘法

主要有两个函数,一个是dot,一个是matmul,都可以在官网找到资料。
numpy.dot
numpy.matmul

在一维和二维的时候dot比matmul应用场景更广,我把dot函数的部分介绍内容从官网摘抄过来
在这里插入图片描述
matmul不能对标量(单独的数)进行运算。

代码示例:

>>> np.dot(3,4)
12
>>> a
array([1, 2])
>>> np.dot(a,3)
array([3, 6])
>>> b
array([3, 4])
>>> np.dot(a,b)
11
>>> c
array([[1, 2],
       [3, 4]])
>>> d=np.ones([2,2])
>>> d
array([[1., 1.],
       [1., 1.]])
>>> np.dot(c,d)
array([[3., 3.],
       [7., 7.]])
>>> 
#np.matmul(a,3)会报同样的错
>>> np.matmul(3,4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: matmul: Input operand 0 does not have enough dimensions (has 0, gufunc core with signature (n?,k),(k,m?)->(n?,m?) requires 1)
>>> np.matmul(a,b)
11
>>> np.matmul(c,d)
array([[3., 3.],
       [7., 7.]])
>>> 

超过二维的运算如果有需要可以去官网。

6.2 矩阵除法

divide和/效果是一样的

numpy.divide(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'true_divide'>

代码示例:

>>> a=np.arange(1,5)
>>> a
array([1, 2, 3, 4])
>>> b=np.arange(2,6)
>>> b
array([2, 3, 4, 5])
>>> b/a
array([2.        , 1.5       , 1.33333333, 1.25      ])
>>> a/4
array([0.25, 0.5 , 0.75, 1.  ])
>>> np.divide(a,4)
array([0.25, 0.5 , 0.75, 1.  ])
>>> 

7、常用矩阵

7.1 全为0的矩阵

官网地址:https://numpy.org/doc/stable/reference/generated/numpy.zeros.html?highlight=zeros#numpy.zeros

>>> np.zeros((2,3),dtype=int)
array([[0, 0, 0],
       [0, 0, 0]])
>>> np.zeros(4,dtype=int)
array([0, 0, 0, 0])
>>> 

7.2 全为1的矩阵

>>> np.ones((2,3),dtype=int)
array([[1, 1, 1],
       [1, 1, 1]])
>>> np.ones(4)
array([1., 1., 1., 1.])
>>> 

8、获得元素下标

可以通过nonzero函数实现,比如想获得,label里面等于0的下标。

>>> import numpy as np
>>> rng=np.random.default_rng()
>>> a=rng.choice([0,1],size=40)
>>> a
array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,
       0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0])
>>> np.nonzero(a==1)
(array([ 0,  1,  2,  3,  5,  8,  9, 16, 17, 21, 24, 25, 26, 29, 31, 34, 38]),)
>>> 

猜你喜欢

转载自blog.csdn.net/u012949658/article/details/116309126