常用 numpy 函数(长期更新)

文章目录

  • np.where()
  • np.zeros()
  • np.zeros_like()
  • np.divide()
  • np.linalg.norm()
  • np.uint8()
  • np.clip()

np.where()

np.where有两种用法

  • np.where(condition,x,y) 当where内有三个参数时,第一个参数表示条件,当条件成立时where方法返回x,当条件不成立时where返回y
#用法一
#当self.net_input(X)返回的值大于等于0.0时,where返回1,否则返回0
np.where(self.net_input(X) >= 0.0, 1, 0)
  • np.where(condition) 当where内只有一个参数时,那个参数表示条件,当条件成立时,where返回的是每个符合condition条件元素的坐标返回的是以元组的形式
#用法二
a = np.array([2,4,6,8,10])
#只有一个参数表示条件的时候
np.where(a > 5)

输出:
(array([2, 3, 4], dtype=int64),)

np.zeros()

返回值:ndarray
给定shape,dtype,order条件下的数组
常用 numpy 函数(长期更新)_第1张图片

np.zeros_like()

返回值:ndarray
和a同样的shape和数据类型(type)的子类零数组(向量)
常用 numpy 函数(长期更新)_第2张图片

np.divide()

  • 用例:
    numpy.divide(x1, x2, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =

  • 功能:
    数组对应位置元素做除法。
    这里的除法结果和Python传统的地板除不同,这里得到的是真实值。numpy.divide的计算结果适应于输出值的数值类型,与输入值的数值类型无关。

  • 参数
    常用 numpy 函数(长期更新)_第3张图片

  • 返回值
    在这里插入图片描述

  • 备注
    在Python 2.2中地板除运算符//和除法运算符/的计算结果一致。通过在程序中添加from future import division代码段可以将默认的地板除运算符/变为真正的除法运算符。
    在Python 3.0中//为地板除运算符而/为真正的除法运算符。函数true_divide(x1, x2)的计算结果也为真正除法。

  • 示例:

from __future__ import division
import numpy as np
x = np.arange(5)
print('真正除法的运算结果:{}'.format(np.true_divide(x, 4)))
print('地板除运算结果:{}'.format(x//4))
print('真正除法的运算结果:{}'.format(x/4))
# 会将4复制5个变为(5,)数组
print('真正除法的运算结果:{}'.format(np.divide(x, 4)))
真正除法的运算结果:[0. 0.25 0.5 0.75 1. ]
地板除运算结果:[0 0 0 0 1]
真正除法的运算结果:[0. 0.25 0.5 0.75 1. ]
真正除法的运算结果:[0. 0.25 0.5 0.75 1. ]

np.linalg.norm()

np.linalg.norm()用法总结

np.linalg.norm()用于求范数,linalg本意为linear(线性) + algebra(代数),norm则表示范数。

用法

np.linalg.norm(x, ord=None, axis=None, keepdims=False)
  • x: 表示矩阵(一维数据也是可以的)

  • ord: 表示范数类型
    常用 numpy 函数(长期更新)_第4张图片
    矩阵的向量:
    ord=1:表示求列和的最大值
    ord=2:|λE-ATA|=0,求特征值,然后求最大特征值得算术平方根
    ord=∞:表示求行和的最大值
    ord=None:表示求整体的矩阵元素平方和,再开根号

  • axis:轴
    Python的numpy中axis=0、axis=1、axis=2解释

  • keepdims:表示是否保持矩阵的二位特性,True表示保持,False表示不保持,默认为False

np.uint8()

uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255

用opencv处理图像时,可以发现获得的矩阵类型都是uint8

import cv2 as cv
img=cv.imread(hello.png)
print(img)
array([[[...],
        [...],
        [...]]],dtype='uint8')

转换成 uint8 类型方法:

  1. numpy有np.uint8()函数,但是这个函数仅仅是对原数据和0xff相与(和最低2字节数据相与),这就容易导致如果原数据是大于255的,那么在直接使用np.uint8()后,比第八位更大的数据都被截断了,比如:
>>>a=[2000,100,2]
>>>np.uint8(a)
array([208, 100, 2], dtype=uint8)
  1. 用 cv2.normalize 函数配合 cv2.NORM_MINMAX,可以设置目标数组的最大值和最小值,然后让原数组等比例的放大或缩小到目标数组,如下面的例子中是将 img 的所有数字等比例的放大或缩小到 0–255 范围的数组中(归一化)
cv2.normalize(img, out, 0, 255, cv2.NORM_MINMAX)

然后改变数据类型

np.array([out],dtype=‘uint8’)

总结:要想将当前的数组作为图像类型来进行各种操作,就要转换到uint8类型,转换的方式推荐使用第二种,因为第一种在值大于255以后就容易丢失。

np.clip()

numpy.clip(a, a_min, a_max, out=None)

参数说明

  • a : 输入的数组
  • a_min: 限定的最小值 也可以是数组 如果为数组时 shape必须和a一样
  • a_max:限定的最大值 也可以是数组 shape和a一样
  • out:剪裁后的数组存入的数组

你可能感兴趣的:(深度学习,安装部署使用教程,numpy,python)