NumPy常用操作
一、NumPy是什么
NumPy是Python的一个用于科学计算的基础包。它提供了多维数组对象,多种衍生的对象(例如隐藏数组和矩阵)和一个用于数组快速运算的混合的程序,包括数学,逻辑,排序,选择,I/O,离散傅立叶变换,基础线性代数,基础统计操作,随机模拟等等。–摘自知乎
NumPy提供了两种基本的对象: ndarray
和 ufunc
. ndarray是存储单一数据类型的多维数组, 而ufunc则是对数组处理的函数
二、NumPy主要特点
- ndarray, 快速, 节省空间的多维数组, 提供数组化的算术运算和高级的广播功能
- 使用标准的数学函数对整个数组的数据进行快速运算, 不需要写循环
- 读/写磁盘上的阵列数据和操作存储器映像文件的工具
- 线性代数、随机数生成、傅立叶变换
- 集成C、C++、Fortran代码的工具
三、NumPy的使用
1、生成NumPy的ndarray的几种方式
NumPy封装了一种新的数据类型: ndarray
, 一个多维数组对象, 该对象封装了许多常用的数学运算符号。
a、从已有的数据中创建
- 将列表转化为ndarray. (可以尝试着把两个东西输出看看, 会有不一样的发现)
1 | num_list = [3.14, 1, 3, 92] |
- 前套列表转化为多位ndarray
1 | num_list = [[3.14, 1, 3, 92], [1, 2, 3, 4]] |
b、使用random模块生成ndarray
有时候我们需要对一些变量进行初始化, 我们就可以使用random模块来生成。random又分为多种函数: 1.random生成0~1之间的随机数、2.uniform生成均匀分布的随机数、3.randn生成标准正态的随机数、4.normal生成正态分布的、5.shuffle随机打乱顺序、6.seeb设置种子. 如下代码:
1 | # 你每次执行都是不一样的结果 |
我的打印结果:
1 | [[0.0818346 0.23860994 0.64879857] |
c、创建特定形状的多维数组
可以生成一些特殊矩阵, 直接上代码:
1 | # 3×3矩阵,矩阵元素均为0 |
将数据保存到磁盘然后读取
1 | nd1 = np.random.random([3, 3]) |
d、利用arange函数
arange是numpy模块中的函数, 废话少说, 实践出真知:
1 | # 从0到10,每次加一生成的数组 |
可以看见, 该函数格式为: arange([start], stop, [step], dtype=None)
, start和stop指定范围, start默认为0, stop必须指定, step为步长。
2、NumPy存取元素
1 | nd = np.diag([1, 2, 3, 4, 5, 6, 7, 8]) |
以上操作仅仅是操作矩阵的行, 如要操作列, 继续往下
1 | nd = np.arange(25).reshape([5, 5]) |
以上学会了吗?
另外, 还可以通过random.choice函数从指定的样本随机抽取数据, 此处略。
3、矩阵操作
1 | nd = np.arange(9).reshape([3, 3]) |
我们在上面使用了 numpy.linalg
的函数, 下面咱们整理了一份表( numpy.linalg
常用的函数):
函数 | 说明 |
---|---|
diag | 一维数组的形式返回方阵的对角线元素 |
dot | 矩阵乘法 |
trace | 求迹, 对角线元素之和 |
det | 计算矩阵列式 |
eig | 计算方阵的特征值与特征向量 |
inv | 计算方阵的逆 |
qr | 计算qr分解 |
svd | 计算奇异值分解svd |
solve | 解线性方程组: Ax=b, 其中A为方阵 |
lstsq | 计算Ax=b的最小二乘解 |