机器学习笔记(二)numpy用法
程序员文章站
2022-03-09 10:06:54
...
numpy
1, 导入numpy,如果没有就pip install numpy
import numpy as np
2, 生成numpy数组,传入一个列表
np.array()
3, numpy数组之间的加减乘除需要元素个数相同,不同会报错
4, n维数组,数学上将一维称为向量,二维称为矩阵,三维及以上称为多维向量
d2 = np.array([[1,2],[3,4]])
# 查看矩阵的形状
d2.shape # (2,2)
# 查看矩阵的元素的数据类型
d2.dtype # dtype('int32')
# 查看维数
d2.ndim # 2
# 查看元素数量
d2.size # 4
# 查看数组元素的长度(字节数)
d2.itemsize # 4
5, 广播
用于形状不同的数组之间的运算
满足1, 数组的某一维度等长
或者2, 其中的一个数组的维度为1
可以进行运算
情况1:
a = np.array([[1,2],[3,4]])
b = np.array([10,20])
# 他们的一维长度都是2
a * b # array([[10, 40],[30, 80]])
# 这里将[10,20]自动转换为[[10,20][10,20]]
情况2:
a = np.array([[1,2],[3,4]])
b = 10
a * b # array([[10, 20],[30, 40]])
# 这里将10自动转换为[[10,10],[10,10]]
6, 访问元素
a = np.array([[1,2],[3,4]])
# 访问第0行
a[0] # array[1,2]
# 访问第0行第一个
a[0][1] # 2
# 转化为一维数组
a = a.flatten() # [1,2,3,4]
# 访问索引为1,2,3的时候不能直接使用数字索引
a[np.array([1,2,3])] # array([2, 3, 4])
7,生成一个全是1的x行y列的矩阵
x,y = 2,1
np.ones([x,y]) # [[1.],[1.]]数据类型为flote
8,深拷贝浅拷贝
a = np.array([[1,2],[3,4]])
# 深拷贝,相当于一个快捷方式,原文件改变,新文件也改变
a1 = np.array(a)
# 浅拷贝,相当于一个新的文件,和原文件没有关系
a2 = np.asarray(a)
a[0][0] = 10
a1 # [[10,2],[3,4]]
a2 # [[1,2],[3,4]]
9,numpy中的一些方法
array1 = np.array([1,2,2])
array2 = np.array([[1,3,2,4,3,5],[1,5,4,3,3,4]])
# 去重
np.unique(array1) # array([1,2])
np.unique(array2) # array([1,2,3,4,5])
# 转置
array2.T # array([[1, 1],[3, 5],[2, 4],[4, 3],[3, 3],[5, 4]])
# 标准差
np.std(array1) # 0.4714045207910317
# 方差
np.var(array1) # 0.2222222222222222
# 最大元素下标
np.argmax(array1) # 1
# 最小元素下标
np.argmin(array1) # 0
# 数组变形
array1.reshape([3,1]) # 产生新的变量,即不修改原值
# array([[1],[2],[2]])
array1.reshape([-1,1]) # 自动计算,此时-1相当于3
# array([[1],[2],[2]])
array1.resize([1,3]) # 不产生新的变量,在原值上修改
10, 从标准正态分布中返回一个或多个样本值
np.random.normal(loc,scale,size) # loc为均值,scale为标标准差,size为个数
11,其他
# 生成指定数量的等差数组linspace
# 生成0-10的三个数
np.linspace(0,10,3) # array([ 0., 5., 10.])
# 指定步长arange
np.arange(0,10,3) # array([0, 3, 6, 9])