python数据分析学习笔记:numpy
一、使用的工具
使用现在比较主流的工具:Anaconda软件中的Jupyter Notebook
1.基本介绍
一个开源的Python的发行版本,其包含了大多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)
2.功能
因为里面有大部分数据分析所用到的库,比如python数据分析三剑客numpy,pandas,matplotlib,我们不再需要通过pip指令进行再次安装,
3.下载地址:
https://www.anaconda.com/download/
注意点:使用适合自己电脑系统的版本,安装过程一般按照正常的步骤,建议在安装过程中选择Just me,仅仅个人使用,安装教程可以参考文章下面的链接,也可以自己去网上查询,网上的教程比较多,anaconda的安装难度系数不大,这里小编就不再展示
4.安装完成后可以打开anaconda,可以看到如下界面
5.打开方式
按下面的一种方式打开jupyter notebook,就能在自己的浏览器弹出一个端口,可以看到自己在电脑上存储的文件
方式1:在如下的界面上点击launch按钮
方式2:自己在电脑搜索jupyter notebook,直接打开
6.新建文件
新建一个新的python3文件,后缀名为.py,也可以在python其他的运行环境中打开
接下来我们就可以开始疯狂敲打我们的代码
二、numpy 的导入
import :用来导入库
as :取别名
np :numpy库的别名,一般是约定俗成的
import numpy as np
三、numpy的学习笔记
1. numpy的创建
1.1 使用np.array()创建
# 导入库
import numpy as np
# 使用dstype来规定类型,np.float32为浮点型
a = np.array([[1,2,3],[2,3,4]],dtype=np.float32)
a
输出:
array([[1., 2., 3.],
[2., 3., 4.]], dtype=float32)
1.2 使用plt创建
matpltlib在后续会进行讲解,在这里先进行了解,由于我们知道图片是由多维数组组成的,所以我们使用imread方法来解析图片生成一个多维数组存放到arr这个数组中
import matplotlib.pyplot as plt
#将图片输出为数组
#‘./5.png’为保存图片路径
arr = plt.imread('./5.png')
arr
输出:
array([[[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.28627452, 0.2901961 , 0.2901961 , 1. ]],
[[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.28627452, 0.2901961 , 0.2901961 , 1. ]],
[[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
[0.5176471 , 0.5647059 , 0.5921569 , 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.28627452, 0.2901961 , 0.2901961 , 1. ]],
...,
[[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ]],
[[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ]],
[[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
[0.18039216, 0.1882353 , 0.19215687, 1. ],
...,
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ],
[0.1882353 , 0.19607843, 0.2 , 1. ]]], dtype=float32)
1.3 使用np的routines函数创建
创建一个全为0的数组,用shape规定数组类型
np.zeros(shape=(2,2)) #shape为数组类型
输出:
array([[0., 0.],
[0., 0.]])
创建一个全为0的数组,用shape规定数组类型
np.ones(shape=(2,2)) #shape为数组类型
输出:
array([[1., 1.],
[1., 1.]])
创建一个步长为20的随机数组
np.arange(0,200,step=20) #step为步长;arrange为随机函数
输出:
array([ 0, 20, 40, 60, 80, 100, 120, 140, 160, 180])
创建一个长度为10的随机数组
np.linspace(0,200,num=10) #num为长度,linspace在指定的间隔内返回均匀间隔的数字
输出:
array([ 0. , 22.22222222, 44.44444444, 66.66666667,
88.88888889, 111.11111111, 133.33333333, 155.55555556,
177.77777778, 200. ])
创建一个规定的size类型随机整型数组
np.random.randint(0,100,size=(3,4)) #size为数组类型
输出:
array([[12, 91, 47, 56],
[10, 49, 53, 31],
[ 6, 75, 65, 45]])
创建一个固定的随机整型数组
#固定随机函数
np.random.seed(10)
np.random.randint(0,100,(4,5))
输出:
array([[ 9, 15, 64, 28, 89],
[93, 29, 8, 73, 0],
[40, 36, 16, 11, 54],
[88, 62, 33, 72, 78]])
创建一个自己规定元素的数组
#以(1,2,3)填充的2*3数组
np.full((2,3),fill_value=(1,2,3)) #fill_value为填充的数组或者元素
输出:
array([[1, 2, 3],
[1, 2, 3]])
创建一个对角线为1,其他为0的数组
#创建一个3*3的矩阵,主对角线为1,其他为0
np.eye(3)
输出:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
创建与a相同类型的数组
a = [2,3]
#创建与a相同类型的数组
np.ones_like(a)
#元素为0
np.zeros_like(a)
#元素可指定
np.full_like(a,2)
输出:
array([2, 2])
创建两个数组进行合并 ,axis决定了合并的方式
(1)axis=0表示第一维度行,所以按行进行合并
a1 = np.array([[1, 2], [3, 4]])
#使用np.concatenate()函数进行合并
np.concatenate((a1, a1),axis=0)
输出:
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
(2)axis=1表示第二维度列,所以按行进行合并
np.concatenate((a1, a1),axis=1)
输出:
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
2.numpy的常用属性
b = np.array([[2,42,1],[3,43,2]])
数组的类型
b.shape #类型
输出:
(2, 3)
数组的维度
b.ndim #维度
输出
2
数组的元素个数
b.size #元素个数
输出
6
数组的元素类型
b.dtype #元素类型
输出:
dtype('int32')
3.索引和切片的操作(重点)
生成1个数组c
c = np.random.randint(0,100,(5,3))
c
输出:
array([[12, 92, 96],
[62, 57, 79],
[42, 57, 97],
[50, 45, 40],
[89, 73, 37]])
索引
c[1,2]
输出:
79
切出前两行
c[0:2]
输出:
array([[12, 92, 96],
[62, 57, 79]])
切出前两列
c[:,0:2]
输出:
array([[12, 92],
[62, 57],
[42, 57],
[50, 45],
[89, 73]])
切出前两行和前两列
c[0:2,0:2]
输出:
array([[12, 92],
[62, 57]])
将所有元素倒置
c[::-1,::-1]
输出:
array([[37, 73, 89],
[40, 45, 50],
[97, 57, 42],
[79, 57, 62],
[96, 92, 12]])
使用图片进行操作
(1)查看原图片
plt.imshow(arr)
(2)将图片倒置
plt.imshow(arr[::-1,::-1])
(3)将图片裁剪(特殊图案)
plt.imshow(arr[300:600,700:1200])
4. 维度变换
生成1个数组d
d = np.random.randint(1,100,(2,4,5))
输出:
array([[[ 1, 19, 24, 4, 30],
[17, 85, 83, 15, 52],
[80, 18, 51, 54, 26],
[49, 18, 33, 82, 81]],
[[42, 91, 13, 31, 82],
[18, 17, 1, 32, 74],
[65, 39, 23, 97, 67],
[68, 63, 96, 28, 83]]])
改变数组的类型,容量要一致
# 2*4*5 = 2*1*20
d.reshape(2,1,20)
输出
array([[[ 1, 19, 24, 4, 30, 17, 85, 83, 15, 52, 80, 18, 51, 54, 26, 49,
18, 33, 82, 81]],
[[42, 91, 13, 31, 82, 18, 17, 1, 32, 74, 65, 39, 23, 97, 67, 68,
63, 96, 28, 83]]])
使用图片进行操作
arr_1 = plt.imread('./4.jpg')
# 使用concatenate函数来组合
arr_3 = np.concatenate((arr_1,arr_1,arr_1),axis=1)
arr_9 = np.concatenate((arr_3,arr_3,arr_3),axis=0)
plt.imshow(arr_9)
4.numpy统计函数
生成随机数组arr2
arr2 = np.random.randint(1,100,(3,4))
arr2
输出
array([[63, 78, 49, 94],
[76, 87, 38, 12],
[22, 34, 96, 44]])
不同方向数组总和
arr2.sum() #全部
arr2.sum(axis=1) #按行
arr2.sum(axis=0) #按列
按列求和的输出:
array([161, 199, 183, 150])
数组的标准三角函数
np.sin(arr2)
np.cos(arr2)
np.tan(arr2)
tan的输出:
array([[ 0.16974975, -0.59918 , -3.17290855, -0.2529781 ],
[ 0.68674769, -1.44241747, 0.31030966, -0.63585993],
[ 0.00885166, -0.62349896, -5.45134011, 0.0177047 ]])
使用around函数使返回的值四舍五入
np.around(arr2,decimals=-1) #decimals 要舍入的小数位数,如果为负,整数将四舍五入到小数点左侧的位置
输出
array([[ 60, 80, 50, 90],
[ 80, 90, 40, 10],
[ 20, 30, 100, 40]])
不同方向求数组的平均值
np.mean(arr2,axis=1) #行向
np.mean(arr2,axis=0) #列向
输出:
array([53.66666667, 66.33333333, 61. , 50. ])
求数组的标准差
np.std(arr2,axis=1) #行向
输出:
array([16.77796174, 29.96143354, 28.23118843])
求数组的方差
np.var(arr2,axis=1) #行向
输出:
array([281.5 , 897.6875, 797. ])
5. numpy数组运算
a1 = np.array([[1,2],[3,2]])
a2 = np.array([[1,2],[3,4]])
矩阵相乘
np.dot(a1,a2)
输出:
array([[ 7, 10],
[ 9, 14]])
点积
a1 * a2
输出:
array([[1, 4],
[9, 8]])
求数组的标准差
np.std(arr2,axis=1) #行向
输出:
array([16.77796174, 29.96143354, 28.23118843])
求数组的方差
np.var(arr2,axis=1) #行向
输出:
array([281.5 , 897.6875, 797. ])
5. numpy数组运算
a1 = np.array([[1,2],[3,2]])
a2 = np.array([[1,2],[3,4]])
矩阵相乘
np.dot(a1,a2)
输出:
array([[ 7, 10],
[ 9, 14]])
点积
a1 * a2
输出:
array([[1, 4],
[9, 8]])
最后附上小编参考的anaconda安装教程
https://blog.csdn.net/weixin_42830697/article/details/100057713