numpy神操作


使用 np.info(fun) 可以查看某个函数的文档信息

1. 创建单位矩阵

np.eye()

>>> np.eye(3)        #单位矩阵肯定是方阵
array([[1., 0., 0.], 
       [0., 1., 0.], 
       [0., 0., 1.]])

区别于 np.ones()

>>> np.ones((3,3))   
array([[1., 1., 1.], 
       [1., 1., 1.], 
       [1., 1., 1.]])

2. 对角阵

np.diag()

>>> x = np.arange(9).reshape((3,3))
>>> x
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

>>> np.diag(x)
array([0, 4, 8])

>>> np.diag(x, k=1) #对角线往上一行
array([1, 5])

>>> np.diag(x, k=-1) #对角线往下一行
array([3, 7])

>>> np.diag(np.diag(x))  #用一维数组构造对角阵
array([[0, 0, 0],
       [0, 4, 0],
       [0, 0, 8]])

3. 提取整数部分

  1. np.floor(),按在坐标轴位置的左边取

    >>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
    >>> np.floor(a)
    array([-2., -2., -1.,  0.,  1.,  1.,  2.])
    
  2. np.ceil() ,按在坐标轴位置的右边取

    >>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
    >>> np.ceil(a)
    array([-1., -1., -0.,  1.,  2.,  2.,  2.])
    

如果是整数,上面两种方法的结果一样

  1. np.trunc() 直接去掉小数点右部分

    >>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
    >>> np.trunc(a)
    array([-1., -1., -0.,  0.,  1.,  1.,  2.])
    
  2. np.rint() ,小于0的按在坐标轴位置的左边取,大于0的按在坐标轴位置的右边取

    >>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
    >>> np.rint(a)
    array([-2., -2., -0.,  0.,  2.,  2.,  2.])
    

4. 通过迭代器创建数组

np.fromiter(iterable, dtype)

>>> iterable = (x*x for x in range(5))  #生成器是特殊的迭代器
>>> np.fromiter(iterable, float)
array([  0.,   1.,   4.,   9.,  16.])

5. 创建从start~stop范围的指定数目的数组

np.linspace(start,stop, endpoint=True, retstep=False, dtype)

>>> np.linspace(2.0, 3.0, num=5)
array([2.  , 2.25, 2.5 , 2.75, 3.  ])

>>> np.linspace(2.0, 3.0, num=5, endpoint=False) #endpoint判断最后一个数是否是stop
array([2. ,  2.2,  2.4,  2.6,  2.8])

>>> np.linspace(2.0, 3.0, num=5, retstep=True)   #retstep:是否把步长step打印出来
(array([2.  ,  2.25,  2.5 ,  2.75,  3.  ]), 0.25)

6. 判断两个数组是否相等

  1. np.allclose(A,B)
>>> np.allclose([1e10,1e-7], [1.00001e10,1e-8])
False
>>> np.allclose([1e10,1e-8], [1.00001e10,1e-9])
True
>>> np.allclose([1e10,1e-8], [1.0001e10,1e-9])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)
True

equal_nan 表示是否认为 np.nan是相等的。np.nan表示 not a number

  1. np.array_equal(A,B)

    >>> np.array_equal([1, 2], [1, 2])
    True
    
    >>> np.array_equal(np.array([1, 2]), np.array([1, 2]))
    True
    
    >>> np.array_equal([1, 2], [1, 2, 3]) #形状不同直接返回False
    False
    
    >>> np.array_equal([1, 2], [1, 4])
    False
    
    >>> a = np.array([1, np.nan])
    >>> np.array_equal(a, a)
    False
    
    >>> np.array_equal(a, a, equal_nan=True) #与np.allclose()类似
    True
    

7. 取出唯一的数据

np.unique()

>>> np.unique([1, 1, 2, 2, 3, 3])
array([1, 2, 3])

>>> a = np.array([[1, 1], [2, 3]])
>>> np.unique(a)
array([1, 2, 3])

令参数axis=0:返回唯一的行

>>> a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]]) 
>>> np.unique(a, axis=0)
array([[1, 0, 0], [2, 3, 4]])

参数return_index 表示是否返回取出的数据在原数组的位置

>>> a = np.array(['a', 'b', 'b', 'c', 'a'])
>>> u, indices = np.unique(a, return_index=True)  #返回一个元组
>>> u
array(['a', 'b', 'c'], dtype='<U1')

>>> indices        #新数组的元素在原数组的位置,重复的取最前一个
array([0, 1, 3])

>>> a[indices]     #由原数组获得新数组
array(['a', 'b', 'c'], dtype='<U1')

参数 return_inverse 表示是否返回原数组的数据在新数组(取出的含有唯一数据的数组)的位置

Reconstruct the input array from the unique values:

>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> u, indices = np.unique(a, return_inverse=True) #返回一个元组
>>> u                      #新数组,含有唯一数据
array([1, 2, 3, 4, 6])

>>> indices                #原数组的元素在新数组的位置
array([0, 1, 4, 3, 1, 2, 1])

>>> u[indices]            # 由新数组获得原数组
array([1, 2, 6, 4, 2, 3, 2])

8. 颠倒一个数据的真假性

np.logical_not()

>>> np.logical_not(3)
False

>>> np.logical_not([True, False, 0, 1])
array([False,  True,  True, False])

>>> x = np.arange(5)
>>> np.logical_not(x<3)
array([False, False, False,  True,  True])

9. 矩阵运算

  • 求逆矩阵 np.linalg.inv(A)

  • 求矩阵的行列式值:np.linalg.det(A)

  • 求矩阵的特征值和特征向量:np.linalg.eig(A)

  • 求解线性方程组:

    #线性方程组 Ax = B  求解 
    A= np.array([
        [3,1],
        [1,2]
    ])
    
    B= np.array([9,8])
    
    x = np.linalg.solve(A,B)
    x
    
  • 矩阵转置:A.T (A为一个矩阵)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[小G]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值