文章目录
- 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条件下的数组
np.zeros_like()
返回值:ndarray
和a同样的shape和数据类型(type)的子类零数组(向量)
np.divide()
-
用例:
numpy.divide(x1, x2, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) = <ufunc ‘true_divide’> -
功能:
数组对应位置元素做除法。
这里的除法结果和Python传统的地板除不同,这里得到的是真实值。numpy.divide的计算结果适应于输出值的数值类型,与输入值的数值类型无关。 -
参数
-
返回值
-
备注
在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: 表示范数类型
矩阵的向量:
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 类型方法:
- numpy有np.uint8()函数,但是这个函数仅仅是对原数据和0xff相与(和最低2字节数据相与),这就容易导致如果原数据是大于255的,那么在直接使用np.uint8()后,比第八位更大的数据都被截断了,比如:
>>>a=[2000,100,2]
>>>np.uint8(a)
array([208, 100, 2], dtype=uint8)
- 用 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:剪裁后的数组存入的数组