Numpy学习笔记

Numpy学习笔记

创建数组

a = np.array([1, 2, 3])  # 创建一个一维数组
b = np.array([(1.5, 2, 3), (4, 5, 6)], dtype=float)  # 创建一个二维数组
c = np.array([[(1.5, 2, 3), (4, 5, 6)], [(3, 2, 1), (4, 5, 6)]], dtype=float)  # 创建一个三维数组

初始占位符

a = np.zeros((3, 4))  # 创建一个3x4全是0的数组
b = np.ones((2, 3, 4), dtype=np.int16)  # 创建一个2x3x4全是1的数组,数据类型为int16
c = d = np.arange(10, 25, 5)  # 创建一个从10到25,步长为5的数组
d = np.linspace(0, 2, 9)  # 创建一个从0到2,等间距的9个数据的数组
e = np.full((2, 2), 7)  # 创建一个2x2全是7的数组
f = np.eye(2)  # 创建一个2x2的单位矩阵
g = np.random.random((2, 2))  # 创建一个2x2的随机数组
h = np.empty((3, 2))  # 创建一个3x2的空数组

I/O

从磁盘保存和加载

np.save('my_array', a)  # 将数组a保存为my_array文件
np.savez('array.npz', a, b)  # 将数组a和b保存为array.npz文件
np.load('my_array.npy')  # 加载my_array.npy文件

从文本文件保存和加载

np.loadtxt("myfile.txt")  # 从文本文件中读取数据
np.genfromtxt("my_file.csv", delimiter=',')  # 从csv文件中读取数据
np.savetxt("myarray.txt", a, delimiter=" ")  # 将数组保存为文本文件

数据类型

np.int64  # 64位有符号整数类型
np.float32  # 标准双精度浮点类型
np.complex  # 复数类型
np.bool  # 布尔类型
np.object  # Python对象类型
np.string_  # 固定长度字符串类型
np.unicode_  # 固定长度Unicode类型

检查数组

a.shape  # 数组a的形状
len(a)  # 数组a的长度
b.ndim  # 数组b的维度
e.size  # 数组e的元素个数
b.dtype  # 数组b的数据类型
b.dtype.name  # 数组b的数据类型名称
b.astype(int)  # 将数组b转换为整数类型

寻求帮助

np.info(np.ndarray.dtype)  # 帮助文档

数组数学

算术运算

b + a  # 加法
np.add(b, a)
a - b  # 减法
np.subtract(a, b)
a * b  # 矩阵乘法
np.multiply(a, b)
a / b  # 除法
np.divide(a, b)
np.exp(b)  # 指数
np.sqrt(b)  # 平方根
np.sin(a)  # 正弦
np.cos(b)  # 余弦
np.log(a)  # 自然对数
e.dot(f)  # 内积

比较运算

a == b  # 逐元素比较
a < 2  # 逐元素比较
np.array_equal(a, b)  # 数组整体比较

聚合函数

a.sum()  # 数组求和
a.min()  # 数组最小值
b.max(axis=0)  # 每一列的最大值
b.cumsum(axis=1)  # 每一行的累计和
a.mean()  # 数组平均值
b.median()  # 矩阵中位数
a.corrcoef()  # 数组相关系数
np.std(b)  # 标准差

数组复制

h = a.view()  # 创建一个新的视图,指向相同的数据,修改其中一个会影响另一个。
np.copy(a)  # 创建一个新的数组,内容和原数组完全相同。
h = a.copy()  # 创建一个新的数组,内容和原数组完全相同。

数组排序

a.sort() # 排序
c.sort(axis=0) # 按列排序

子集、切片、索引

子集

a[2]  # 选择第二个索引处的元素
b[1, 2]  # 选择第一行第二列的元素 (相当于 b[1][2])

切片

a[0:2]  # 选择索引为 0 和 1 的项
b[0:2, 1]  # 选择第 0 行和第 1 行在第 1 列的项目
b[:1]  # 选择第 0 行的所有项目 (等同于 b[0:1, :])"
c[1, ...]  # 等同于 [1,:,:]
a[::-1]  # 反转数组

和Python内置切片类似,只是可能

  1. 两个维度:比如b[0:2, 1],用逗号隔开,第一个代表行,第二个代表列
  2. 更多维度:比如c[1, …],省略号代表后面每个维度

布尔索引

a[a < 2]  # 选择数组 a 中小于 2 的元素

高级索引

b[[1, 0, 1, 0], [0, 1, 2, 0]]  # 选择元素 (1,0),(0,1),(1,2) 和 (0,0)
b[[1, 0, 1, 0]][:, [0, 1, 2, 0]]  # 选择矩阵的部分行和列

数组操作

数组转置

i = np.transpose(b)
i.T

改变数组形状

b.ravel()  # 将数组展平
g.reshape(3, -2)  # 变形,但不改变数据

增加/移出元素

h.resize((2, 6))  # 返回一个形状为 (2,6) 的新数组
np.append(h, g)  # 向数组追加项目
np.insert(a, 1, 5)  # 在数组中插入项目
np.delete(a, [1])  # 从数组中删除项目

合并数组

np.concatenate((a, d), axis=0)  # 连接数组
np.vstack((a, b))  # 垂直堆叠数组(按行)
np.r_[e, f]  # 垂直堆叠数组 (按行)
np.hstack((e, f))  # 水平堆叠数组(按列)
np.column_stack((a, d))  # 水平堆叠数组(按列)
np.c_[a, d]  # 水平堆叠数组(按列)

拆分数组

np.hsplit(a, 3)  # 将数组在第3个索引处进行水平拆分
np.vsplit(c, 2)  # 将数组在第2个索引处进行垂直拆分
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值