np.where有两种用法
#用法一
#当self.net_input(X)返回的值大于等于0.0时,where返回1,否则返回0
np.where(self.net_input(X) >= 0.0, 1, 0)
#用法二
a = np.array([2,4,6,8,10])
#只有一个参数表示条件的时候
np.where(a > 5)
输出:
(array([2, 3, 4], dtype=int64),)
返回值:ndarray
给定shape,dtype,order条件下的数组
返回值:ndarray
和a同样的shape和数据类型(type)的子类零数组(向量)
用例:
numpy.divide(x1, x2, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) =
功能:
数组对应位置元素做除法。
这里的除法结果和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()用于求范数,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
uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255
用opencv处理图像时,可以发现获得的矩阵类型都是uint8
import cv2 as cv
img=cv.imread(hello.png)
print(img)
array([[[...],
[...],
[...]]],dtype='uint8')
转换成 uint8 类型方法:
>>>a=[2000,100,2]
>>>np.uint8(a)
array([208, 100, 2], dtype=uint8)
cv2.normalize(img, out, 0, 255, cv2.NORM_MINMAX)
然后改变数据类型
np.array([out],dtype=‘uint8’)
总结:要想将当前的数组作为图像类型来进行各种操作,就要转换到uint8类型,转换的方式推荐使用第二种,因为第一种在值大于255以后就容易丢失。
numpy.clip(a, a_min, a_max, out=None)
参数说明