NumPy
numpy是python中科学计算的基础包
它是一个Python库,提供多维数组对象,各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法
Anaconda安装
优点:
- 方便安装: 就像安装一个软件一样简单,它为您预先安装好了许多常用的工具,无需单独配置。
- 包管理器: 包含一个名为Conda的包管理器,用于安装、更新和管理软件包。
- 环境管理: 可以轻松的创建和管理多个独立的Python环境,比如可以安装 python2 和 3 环境,实现自由切换
- 集成工具和库: 捆绑了许多用于数据科学、机器学习和科学计算的重要工具和库,如: NumPy、Pandas、Matplotlib、SciPy、Scikit-learn等。
- 跨平台性: 可在Windows、macOS和Linux等操作系统上运行,使其称为一个跨平台的解决方案。

下载与安装
官网下载: https://www.anaconda.com/download/success?reg=skipped
ndarray
Numpy数组(ndarray)的核心特性
多维性: 支持0维、1维(向量)、2维(矩阵)及更高维数组。
同质性: 所有元素类型必须一致(通过dtype指定)
高效性: 基于连续内存块存储,支持向量化运算
多维性
python
import numpy as np
arr = np.array(5) # 创建0维的ndarray
print(arr)
print(arr.ndim) # 查看arr的维度
import numpy as np
arr = np.array([1,2,3,4,5]) # 创建1维的ndarray
print(arr)
print(arr.ndim) # 查看arr的维度
import numpy as np
arr = np.array([[1,2,3],[4,5,6]]) # 创建2维的ndarray
print(arr)
print('arr的维度:',arr.ndim) # 查看arr的维度同质性
python
import numpy as np
arr = np.array([1,2,'hello',4,5]) # 不同的数据类型会被强制转换成相同的数据类型
print(arr)
print(arr.ndim) # 查看arr的维度ndarray的属性
shape: 数组的形状: 行数和列数(或更高维度的尺寸)
ndim 维度数量: 数组是几维的
size 总元素个数: 数组中所有元素的总数
dtype 元素类型: 数组中元素的类型(整数、浮点数等)
T 转置L 行变列,列变行
itemsize 单个元素占用的内存大小(以字节为单位)
python
arr= np.array([[1,2,3],[4,5,6]])
print(arr)
print('ndarray的形状',arr.shape)
print('ndarray的维度',arr.ndim)
print('ndarray的元素的个数',arr.size)
print('ndarray的元素的数据类型',arr.dtype)
print('ndarray的元素的转置',arr.T)
# [[1 2 3]
# [4 5 6]]
# ndarray的形状 (2, 3)
# ndarray的维度 2
# ndarray的元素的个数 6
# ndarray的元素的数据类型 [[1 4]
# [2 5]
# [3 6]]ndarray的创建
1. 基础构造: 适用于手动构建小规模数组或复制已有数据。
python
# 基础的创建方法
list1 = [4,5,6]
arr = np.array(list1,dtype=np.float64)
print(arr.ndim) # 属性
print(arr.dtype) # 属性
print(arr)
arr1 = np.copy(arr) # 元素跟原始的数组相同,但是不是一个数组了
print(arr1)
arr1[0] = 8
print(arr1)
print(arr)2. 预定义形状填充: 用于快速初始化固定形状的数组(如全0占位、全1初始化)。
全0
python
arr = np.zeros((3,4)) # 创建一个3行4列的数组,每个元素都是0
print(arr)全1
python
arr = np.ones((3,4)) # 创建一个3行4列的数组,每个元素都是1
print(arr)固定值
python
arr = np.full((3,4),7) # 创建一个3行4列的数组,每个元素都是7
print(arr)未初始化
python
# 未初始化
arr = np.empty((4,2))
print(arr.dtype)
print(arr)创建形状相同的数组
python
arr1 = np.zeros_like(arr)
print(arr1)
arr1 = np.empty_like(arr)
print(arr1)
arr1 = np.ones_like(arr)
print(arr1)
arr1 = np.full_like(arr, 10)
print(arr1)3. 基于数值范围生成: 生成数值序列,常用于模拟事件序列、坐标网格等。
等差数列
python
arr = np.arange(1,10,2)
print(arr)等间隔数列
python
# 等间隔数列
app = np.linspace(0,10,5)
print(app)对数间隔数列
python
# 对数间隔数列
arr = np.logspace(0,4,3,base=2)
print(arr)4. 特殊矩阵生成: 数学运算专用(如线性代数中的单位矩阵)。
矩阵是一个由行和列排列成的矩形数组
形状: 这个矩阵有2行3列,记作2*3矩阵
单位矩阵: 主对角线上的数字为1,其他的数字为0
python
# 特殊矩阵
# 单位矩阵: 主对角线上的数字为1,其他的数字为0
arr = np.eye(3)
print(arr)对角矩阵: 主对角线上非零,其他的数字为0
python
# 对角矩阵: 主对角线上非零,其他的数字为0
arr = np.diag([5,1,2,3])
print(arr)5. 随机数组生成: 模拟实验数据、初始化神经网络权重等场景。
生成0到1之间的随机浮点数(均匀分布)
python
# 随机数组的生成
# 生成0到1之间的随机浮点数(均匀分布)
arr = np.random.rand(2,3)
print(arr)生成指定范围区间的随机浮点数
python
# 生成指定范围区间的随机浮点数
arr = np.random.uniform(3,6,(2,3))
print(arr)生成指定范围区间的随机浮点数
python
# 生成指定范围区间的随机整数
arr = np.random.randint(3,30,(2,3))
print(arr)生成随机数列(正态分布)(-3到3之间的概率大)
python
# 生成随机数列(正态分布)
# 两边的概率小,中间的概率大
arr = np.random.randn(2,3)
print(arr)设置随机种子
python
# 设置随机种子
np.random.seed(10)
arr = np.random.randint(1,10,(2,5))
print(arr)6. 高级构造方法: 处理非结构化数据(如文件、字符串)或通过函数生成复杂数组。
ndarray的数据类型
布尔类型
python
arr = np.array([1,0,1,0],dtype='bool')
print(arr)
arr = np.array([1,0,1,0],dtype=np.bool)
print(arr)整数类型
python
arr = np.array([1,0,127,0],dtype=np.int8)
print(arr)索引与切片
一维数组的索引与切片
python
# 一维数组的索引与切片
# np.random.seed(2)
arr = np.random.randint(1,100,20)
print(arr)
print(arr[10])
print(arr[:]) # 获取全部的数据
print(arr[1:])
print(arr[2:5]) # start:end+1 左包又不包
print(arr[ (arr > 10) & (arr < 70)]) # 布尔索引
print(arr[slice(2,15,3)]) # 布尔索引二位数组的索引与切片
python
# 二位数组的索引与切片
arr = np.random.randint(1,100,(4,8))
print(arr)
print(arr[1][3]) # 索引
print(arr[1,2:5])
print(arr[2][arr[2]>50])
print(arr[:,3])ndarray的运算
python
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)python
c = [1,2,3]
d = [4,5,6]
print(c + d)python
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([[4,5,6],[7,8,9],[1,2,3]])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** b)数组与标量之间的算数运算
python
# 数组与标量之间的算数运算
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a + 3)广播机制
- 获取形状
- 是否可以广播
python
a = np.array([1,2,3])
b = np.array([[4],[5],[6]])
print(a + b)Numpy中的常用函数
- 基本的数学函数
计算平方根
python
print(np.sqrt(4))
print(np.sqrt([1,4,9]))
print(np.sqrt(np.array([1,25,81])))计算指数 e^x
python
print(np.exp(1)) # e^x计算自然对数
python
print(np.log(2.71))计算正弦值、余弦值
python
print(np.sin(np.pi/2))
print(np.cos(np.pi))计算绝对值
python
arr = np.array([-1,1,2,-3])
print(np.abs(arr))计算a的b次幂
python
print(np.power(arr,2))四舍五入
python
print(np.round([3.2,4.5,8.1,9.6]))向上取整,向下取整
python
arr = np.array([1.6,25.1,81.7])
print(np.ceil(arr)) # 向上取整
print(np.floor(arr)) # 向下取整检测缺失值NaN
python
np.isnan([1,2,3])
np.isnan([1,2,np.nan])- 统计函数 求和、计算平均值、计算中位数、标准差、方差 查找最大值、最小值 计算分位数、累积和、累积差
求和
python
arr = np.random.randint(1,20,8)
print(arr)
# 求和
print(np.sum(arr))计算平均值
python
print(np.mean(arr))计算中位数
python
# 奇数: 排序后中间的数值
# 偶数: 中间的两个数的平均值
print(np.median([1,2,3]))
print(np.median([1,2,4]))
print(np.median([1,2,4,8]))
print(np.median([1,2,5,80]))计算标准差、方差
python
print(np.var([1,2,3]))
print(np.std([1,2,3]))计算最大值、最小值
python
print(arr)
print(np.max(arr),np.argmax(arr))
print(np.min(arr),np.argmin(arr))分位数
中位数
python
print(np.median([1,2,3]))
print(np.median([1,2,3,4]))
np.random.seed(0)
arr= np.random.randint(0,100,4)
print(arr)
print(np.median(arr))
print(np.percentile(arr,25))累积和、累积
python
arr= np.array([1,2,3,4])
print(np.sum(arr))
print(np.cumsum(arr))
print(np.cumprod(arr))python
# 是否大于
print(np.greater([3,4,5,6],4))
# 是否小于
print(np.less([3,4,5,6,7,8],4))
# 是否等于
print(np.equal([3,4,5,6,7,8],4))
print(np.logical_and([1,0],[1,1]))
print(np.logical_or([0,0],[1,1]))
print(np.logical_not([1,0]))
# 检查元素是否至少有一个元素为True
print(np.any([0,1,0,0,1]))
print(np.any([0,0,0,0,0]))
# 检查元素是否全部元素为True
print(np.all([1,1,0,1,1]))
print(np.all([1,1,1,1,1]))
# 自定义条件
# print(np.where(条件,符合条件的,不符合条件的))
arr = np.array([1,2,3,4,5])
print(np.where(arr > 3,arr,0))
print(np.where(arr < 3,arr,0))
arr = np.array([1,2,3,4,5])
print(np.where(arr < 3,1,0))
print(np.where(
score < 60,'不及格',np.where(
score < 80,'良好','优秀'
)
))
# np.select(条件,返回的结果)
print(np.select([score > 80,(score >= 60) & (score <=80),score < 60],['优秀','良好','不及格'],default='未知'))排序函数
python
# 排序函数
np.random.seed(0)
arr = np.random.randint(1,100,20)
print(arr)
# arr.sort() # 修改原数组
# print(arr)
print(np.sort(arr))
print(np.argsort(arr)) # 索引
print(arr)
# 去重函数
print(np.unique(arr))
# 数组的拼接
arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])
print(arr1 + arr2)
print(np.concatenate((arr1,arr2)))