numpy 操作
numpy 模块
import numpy as np
- 使用array()创建一个一位数组
arr = np.array([1,2,3,4,5])
arr1 = np.array([[1,2,3],[4,5,6]])
- 数组和列表的区别是什么?
- 数组中存储的数据元素类型必须是统一类型
- 优先级
- 字符串>浮点数>整数
np.array([[1,2,‘two‘],[4,5.5,6]])
# 使用plt创建
import matplotlib.pyplot as plt
img_arr = plt.imread(‘./img.jpg‘) #将图片数据进行读取,返回的是一个三维数组
# 将数组中的数据进行图像展示
plt.imshow(img_arr)
# 将数组中的每一个元素都减去100
plt.imshow(img_arr-100)
- 使用routines函数创建
- zero()
- ones()
- linespace()
- arange()
- random系列
np.ones(shap=(4,5))
np.linspace(0,100,num=20)
np.arange(1,100,2)
np.random.randint(0,100,size=(3,4))
# 固定随机性
np.random.seed(23)
np.random.randint(1,100,size=(3,4))
# numpy 的常用属性
- shape #反回的形状
- ndim # 维度
- size # 返回元素个数
- dtype # 数组元素类型
##### 如何修改数组元素的数据类型
arr=np.array([1,2,3])
# 查看
arr.dtype
# 修改
arr.dtype = ‘int8‘
#############重点############
numpy 的索引和切片操作(重点)
- 索引操作和列表同理
- 切片操作
- 切出前倆列数据
- 切出前倆行数据
- 切出前倆行的数据
- 数组数据翻转
- 练习:将一张图片上下左右进行翻转操作
- 练习:将图片进行指定区域的裁剪
arr = np.random.randint(1,100,size=(5,7)) # size代表的是5行7列
# 切出前倆列数据
arr[0:2]
# 切出前倆列数据
arr[:,0:2] #[行,列]
# 切出前倆行前倆列
arr[0:2,0:2]
# 数组进行翻转
arr[::-1,:]
# 将数组行进行翻转
arr[:,::-1]
arr[::-1,::-1]
# 将图片进行左右翻转
plt.imshow(img_arr[:,::-1,:])
# 将图片上下翻转
plt.imshow(img_arr[::-1,:,:])
# 上下左右颜色都翻转
plt.imshow(img_arr[::-1,::-1,::-1])
####### 将图片进行裁剪
maji = plt.imread(‘./maji.jpg‘)
plt.imshoe(maji)
maji[50:390,90:380,:] # [行,列,颜色]
# 变形reshape
arr = np.random.randint(0,100,size=(3,4))
# 将二维数组变成一维数组
arr_1 = arr.reshape((12,))
# 将一维变成2维
arr_1.reshape((3,4))
# # # # 级联操作
- 将多个numpy数组进行横向或者纵向的拼接
- axis 轴向的理解
0:列
1:行
- 问题:
- 级联的倆个数组维度一样,但是行列个数不一样会如何?
ar = np.random.randint(0,100,size=(3,4))
np.concatenate((ar,ar),axis=1) # axis=0是竖直方向 axis=1水平
# 实现图片的9宫格
ar3=np.concatenate((maji,maji,maji),axis=1)# 把三张图片横向放一起
ar4=np.concatenate((maji,maji,maji),axis=0)# 把三张图片竖直放一起
# 常用的聚合操作
- sum,max,min,mean
arr.sum(axis=0) # 求的是行的值
arr.sum(axis=1) # 求的是竖直的值
arr.sum(axis=None) # 求的是所有值
## -- 常用的数学函数
- NumPy提供了标准的三角函数:sin(),cos(),tan()
- numpy.around(a,decimals)函数返回指定数字的四舍五入值
参数说明:
- a:数组
- deecimals: 摄入的小数位数,默认值为0,如果为负,整数将四舍五入到小数点左侧的位置
np.sin() # 正弦函数
np.around(arr,decimals=-1) # decimals从小数点几位开始四舍五入负数表示的是小数点的左边,正数是右边
### 重点 常用的统计函数
- numpy.amin() 和 numpy.amax(),用于计算数组中的元素沿指定轴的最小,最大值。
numpy.ptp():计算数组中元素最大值与最小值的差(最大值-最小值)
numpy.median()函数用于计算数组a中元素的中位数(中值)
标准差std():标准差是一组数据平均值分散程度的一种度量
- 公式:std = sqrt(mean(x-x.mean())**2)
- 如果数组是[1,2,3,4],则其平均值为2.5.因此,差的平方是[2.25,0.25,0.25,2.25],并且其平均值的平方根除
- 既sqrt(5/4),结果为1.118033...
- 方差var(): 统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,即 mean(x-x.mean). 换句话说,标准差是方差的平方根。
方差公式:DX = E[(X-EX)^2]
方差公式 : s^2=[(x1-x)^2 +...(xn-x)^2]/n ===> 其中x就是总和除以个数,其中个数除以俩次。 方差越小,波动越小
标准差: 方差开根号
-- 机器学习 矩阵相关
-- Numpy 中包含了一个矩阵numpy.matlib,该模块的函数返回的是一个矩阵,而不是ndarray对象,一个的矩阵是一个由行列元素排列组成的矩形阵列。
-- Numpy.matlib.identity()函数返回给定大小的单位矩阵。单位矩阵是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素为1,除此以外全都是0.
-- 转置举证
-- .T
-- 矩阵相乘
-- numpy.dot(a,b,out=None)
a:ndarray 数组
b:ndarray 数组
实例:
2 1 + 1 2 = 3 3
4 3 1 0 5 3
矩阵相加类似
矩阵相乘以一个常数,就是所有位置乘以这个数
2 * 2 1 = 4 2
4 3 8 6
矩阵乘以矩阵的时候,一切就变得那么的棒棒哒
2 1 * 1 2 = 3 4
4 3 1 0 7 8
第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加(2*1+1*1),的到的结果就是上面的三(3),所以接下的操作你懂我也懂。(就是行乘列)
公式:numpy.dot(a1,a2)
-- 线性代数基于矩阵的推导
-- 此处我百度看了下对我好难,所以我学会了就不分享了。
原文:https://www.cnblogs.com/thaimj1314520/p/14772570.html