1.关于numpy
1.什么是numpy:
numpy是python开源的科学计算包,是高级的数值编程工具:
1.强大的N维数组对象:ndarray
2.可以用来对数组结构进行运算(不用通过循环与遍历) --- 直接进行矩阵运算
3.拥有非常强大的模块库:随机数、线性代数等等
许多高级的工具都是以numpy为基础的:pandas
2.关于numpy我们需要学习哪些?
1.numpy基础的数据结构
2.numpy通用的函数
3.numpy索引以及切片
4.numpy随机数
5.numpy数据的输入与输出
2.numpy的基础数据结构
概念:numpy数组是一个多维数组对象,也称为ndarray,由两部分组成:
1.实际的数据
2.描述这些数据的元数据
如何创建数组:
1.导入模块:numpy
import numpy as np
2.创建数组对象:array
ar = np.array() --- 括号类可以使列表 元组 数组
注意:
数组的维数称为秩 - rank,一维数组的秩为1,二维数组的秩为2,依次类推,秩其实是描述轴的数量
常用的方法:
方法 | 作用 |
---|
arr.ndim | 输出数组的维度的个数 |
arr.shape | 数组的维度,比如n行m列 维度就是shape(n,m) |
arr.size | 数组总元素的个数 n * m |
arr.dtype | 数组中每个元素的类型 |
arr.itemsize | 每个元素的字节大小 |
常见创建数组的方法:
1.array()
格式:np.array()
注意:括号内可以使列表、元组 、生成器等
2.arange()
格式:np.arange()
注意:用生成均匀间隔的值,类似range,不同的是,它可以返回小数
3.linsapce()
格式:np.linspae(开始,停止,num=50,[endpoint=True,retstep=False])
注意:在这个区间内生成num个均匀的间隔样本,默认是50
5.zeros()/zeros_like/onses()/ones_like()
格式:np.zeros(数量)/np.zeros_like(数组)
注意:在使用zeros和ones时一定要给定数量,zeros_like是返回与给定数组相同形状和类型的零或1数组
6.eye()
格式:np.eye(数量)
注意:创建一个正方的 N * N 的单位矩阵,对角线为1,其余为0
3.通用函数
数组形状:
.T方法:
功能:将形状转置,例如原shape为(3,4) ---> (4,3),一维数组形状不变
用法:
已知 : ar1 = np.arange(10)
print(ar1.T)
.reshape方法:
已知:ar1 = np.onse(5,2)
改变方法有三种:
1.直接改变已有形状:
ar2 = ar1.reshape(2,5)
2.生成数组后直接改变形状
ar3 = np.zeros((4,6)).reshape(3,8)
3.参数内添加数组,目标形状改变
ar5 = np.reshape(np.arange(12),(3,4))
.resize方法:
numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。
ar6 = np.resize(np.arange(5),(3,4))
数组的复制:
copy:
功能:生成数组及其数据的完整拷贝
注意:.T/.reshape/.resize都是生成新的数组
数组类型的转换:
.astype()
用法:在生成数组的同时,可以使用dtype指定元素的类型
ar2 = ar1.astype(np.int32) --- 生成新的类型
注意:养成好习惯,数组类型用 np.int32,而不是直接用int32
数组的堆叠:
numpy.hstack(tup):水平(按列顺序)堆叠数组
注意:一维数组堆叠a,b可以不一样,二维必须是一样
numpy.vstack(tup):垂直(按列顺序)堆叠数组
注意:沿着新轴连接数组的序列,形状必须一样!
数组的拆分:
numpy.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分
输出结果为列表,列表中元素为数组
numpy.vsplit(ary, indices_or_sections)::将数组垂直(行方向)拆分为多个子数组 → 按行拆
numpy读取/写入数组数据、文本数据:
# 存储数组数据 .npy文件
import os
os.chdir('C:/Users/Hjx/Desktop/')
ar = np.random.rand(5,5)
print(ar)
np.save('arraydata.npy', ar)
# 也可以直接 np.save('C:/Users/Hjx/Desktop/arraydata.npy', ar)
# 读取数组数据 .npy文件
ar_load =np.load('arraydata.npy')
print(ar_load)
# 也可以直接 np.load('C:/Users/Hjx/Desktop/arraydata.npy')
# 存储/读取文本文件
ar = np.random.rand(5,5)
np.savetxt('array.txt',ar, delimiter=',')
# np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# '):存储为文本txt文件
ar_loadtxt = np.loadtxt('array.txt', delimiter=',')
print(ar_loadtxt)
# 也可以直接 np.loadtxt('C:/Users/Hjx/Desktop/array.txt')