python深度学习笔记(一)——numpy篇(下)

numpy基础(下)

在本节中,将记录一些numpy的其他操作,如改变矩阵大小、创建01矩阵、创建数字,随机,平均序列、乘法、矩阵基本操作(拉伸成一维、拼接和切割)、最大值查找、矩阵拓展以及排序
首先让我们从引入numpy库开始:

import numpy as np

1.改变矩阵大小

利用reshape([x,y])改变矩阵大小后,可以利用ndim返回矩阵维度
如:

matrix = np.array(np.arange(25))  # 创建一个长度为25的一维矩阵
ch = matrix.reshape([5, 5])  # 改变矩阵大小为5×5

print("原矩阵为:{}".format(matrix))
print("改变后的矩阵为\n{}".format(ch))
print("matrix矩阵维度为:{}".format(matrix.ndim))
print("ch矩阵维度为:{}".format(ch.ndim))

输出结果为:
在这里插入图片描述

2.创建0、1矩阵

使用zeros((x,y))ones((x,y))创建x行y列的全0或全1矩阵

# 创建0矩阵
print("\n~~~~~~~~~~~~~~~~~~创建0矩阵~~~~~~~~~~~~~~~~~~")
print("初始化一个5行5列的0矩阵:\n{}".format(np.zeros((5, 5))))

# 创建全1矩阵
print("\n~~~~~~~~~~~~~~~~~~创建全1矩阵~~~~~~~~~~~~~~~~~~")
print("初始化一个3行3列的创建全1矩阵:\n{}".format(np.ones((3, 3), dtype=np.int32))) # 将数据类型改为int

输出结果为:
在这里插入图片描述

3.创建序列

  1. 创建数字序列
    使用方式和python相同,直接使用arrange(x, y, len)表示在区间[x,y]中以步长len取数。
matrix = np.arange(5, 100, 10)
print("从5到100以步长为10创建矩阵:\n{}".format(matrix))
print("reshap成2行5列的矩阵:\n{}".format(matrix.reshape([2, 5])))

输出结果:
在这里插入图片描述
2. 创建随机序列
使用numpy自带的ramdom.random((x, y))来生成x行y列的范围为0 ~ 1的矩阵

matrix = np.random.random((3, 4))
print("随机生成3行4列的矩阵:\n{}".format(matrix))

输出结果为:
在这里插入图片描述

  1. 创建平均序列
    使用numpy自带的linspace(x, y, len)表示在区间[x,y]中以平均取出len个数。
matrix = np.linspace(0, 2 * np.pi, 100)
print("在0到2 pi中平均取100个数形成的矩阵:\n{}".format(matrix))

输出结果:
在这里插入图片描述

4.矩阵乘法

在numpy中,乘法分为矩阵乘法(线性代数中学的行×列)和普通的乘法(对应位置相乘,如矩阵a的第一行第一列只和矩阵b的第一行第一列的数乘)
矩阵乘法使用dot实现,普通乘法直接使用*来实现。

a = np.array([[1, 1], [2, 2]])
b = np.array([[2, 0], [0, 2]])

print("原始矩阵a:\n{}\n原始矩阵b:\n{}".format(a, b))
print("*乘(对应位置相乘):\n{}".format(a * b))
print("矩阵乘法(行乘列):\n{}".format(a.dot(b)))

输出结果:
在这里插入图片描述

5.矩阵基本操作

  1. 多维矩阵变成一维
    要将一个多维矩阵,如2维矩阵拉伸成1维,使用ravel即可。
matrix = np.round(10 * np.random.random((3, 4)))
matrix = matrix.astype(np.int32)
print(matrix)
print("多维矩阵变成一维(ravel):\n{}".format(matrix.ravel()))

输出结果为:
在这里插入图片描述
2. 矩阵拼接
将两个矩阵拼接可以分为横向拼接hstack((matrix1, matrix2))和纵向拼接vstack((matrix1, matrix2))

a = np.array([[1, 1], [2, 2]])
b = np.array([[2, 0], [0, 2]])

print("原始矩阵a:\n{}\n原始矩阵b:\n{}".format(a, b))
print("横着拼:\n{}".format(np.hstack((a, b))))
print("竖着拼:\n{}".format(np.vstack((a, b))))

输出结果:
在这里插入图片描述

  1. 矩阵切割
    既然矩阵可以拼接,那么它也可以被切割。同样被分为横着切hsplit(matrix1, num)和竖着切vhsplit(matrix1, num)
a = np.round(10 * np.random.random((4, 6)))
a = a.astype(np.int32)
print("原始矩阵:\n{}".format(a))
print("横着切:\n{}".format(np.hsplit(a, 3)))
print("竖着切:\n{}".format(np.vsplit(a, 2)))

输出结果为:
在这里插入图片描述

6.最大值查找

利用索引查找最大值:

data = np.sin(np.arange(1, 30, 2).reshape(3, 5))
print("原始数据为:\n{}".format(data))
ind = data.argmax(axis=0)
print("按列查找最大值序号为:\n{}".format(ind))
print("找出最大值:\n{}".format(data[ind, range(data.shape[1])]))

输出结果为:
在这里插入图片描述

7.矩阵拓展

将一个矩阵按块延申拓展

a = np.arange(0, 100, 20)
print("原始数据为:\n{}".format(a))
print("拓展后:\n{}".format(np.tile(a, (3, 4))))

输出结果为:
在这里插入图片描述

8.矩阵排序

a = np.array([[7, 5, 2], [8, 5, 3]])
print("按行排序:\n{}".format(np.sort(a, axis=1)))
a = a.ravel()
print("索引排序:\n{}".format(np.argsort(a)))
print("利用排序后的索引进行排序:\n{}".format(a[np.argsort(a)]))

输出结果为:
在这里插入图片描述
代码获取传送门.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值