【Numpy第二讲】改变矩阵形状、矩阵切片

这是Numpy的第二篇,第一篇可以看此链接
【Numpy第一讲】如何生成矩阵,如何对矩阵进行加减乘除

更改矩阵的维度

使用np.reshape()函数

使用方法:

import numpy as np

矩阵 = np.array([1,2,3,4,5,6,7,8])

# 将它重新形状为2行4列的二维数组
reshape后 = np.reshape(矩阵,(2, 4))

print(reshape后)

r e s h a p e 后 = [ 1 2 3 4 5 6 7 8 ] reshape后=\begin{bmatrix} 1 & 2 & 3 & 4\\ 5&6&7&8 \\ \end{bmatrix} reshape=[15263748]

用户可以自行设置修改后的行列数值,此时我们将一个一位的数组转换为了二行四列的数组,函数将会自动将他们转换为对应的形状。

但如果无法满足新数组的大小,那么就会报错。

此外,无需将行列两个数都给出,倘若只给出一个,将另外一个填为-1,函数会自动计算另一个参数

import numpy as np

矩阵 = np.array([1,2,3,4,5,6,7,8])

# 将它重新形状为4列的二维数组
reshape后 = np.reshape(矩阵,(4, -1))

print(reshape后)

r e s h a p e 后 = [ 1 2 3 4 5 6 7 8 ] reshape后=\begin{bmatrix} 1 & 2 \\ 3 & 4\\ 5&6 \\ 7&8 \\ \end{bmatrix} reshape= 13572468

使用np.resize()函数

和上一个函数类似,它也可以转换函数的维度

但是相对于前者有一个最大的不同

np.resize()函数可以忽视匹配度,如果新矩阵的元素数量大于原矩阵,那么就会新增元素以匹配新矩阵

import numpy as np

矩阵 = np.array([1,2,3,4,5,6,7,8])

# 将它重新形状为4行4列的二维数组
resize后 = np.resize(矩阵,(4,4))

print(resize后)

新矩阵中的元素为16个,但原矩阵显然不满足,于是函数将重复原矩阵的元素,直到满足位置
r e s i z e 后 = [ 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 ] resize后=\begin{bmatrix} 1 & 2 &3 &4\\ 5 & 6&7&8\\ 1 & 2 &3 &4\\ 5 & 6&7&8\\ \end{bmatrix} resize= 1515262637374848
当新矩阵不足以容纳原来的元素时,函数将删除多余的元素。

import numpy as np

矩阵 = np.array([1,2,3,4,5,6,7,8])

# 将它重新形状为4行1列的二维数组
resize后 = np.resize(矩阵,(4,1))

print(resize后)

r e s i z e 后 = [ 1 2 3 4 ] resize后=\begin{bmatrix} 1 \\ 2\\ 3 \\ 4 \\ \end{bmatrix} resize= 1234

对矩阵进行统计

有时候我们需要求出矩阵中的最大值,平均值,或者是某一列某一行的某个值。

此时就需要求值的函数了,非常简单,对于总矩阵来说,可以用的函数有以下几个

import numpy as np
A = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 矩阵A中所有元素的和
A.sum()

# 矩阵的A最大值
A.max()

# 矩阵的A最小值
A.min()

# 最大元素所在的位置(从0开始)
A.argmax()

# 最小元素所在的位置(从0开始)
A.argmin()

但此时,你想只针对矩阵中某一行某一列,应该怎么做呢

import numpy as np
A = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# 矩阵A每一行中的最大值
A.max(axis=1)

## 矩阵A每一列中的最大值
A.min(axis=0)

我们用 axis=1 表示横轴(行),用 axis=0 表示纵轴(列),以此单独计算出所有列和行具体的值。

矩阵的切片和索引

矩阵的索引

对于一个矩阵,我们有时候想获取它的一部分,这时候就需要将矩阵切片了

要了解切片,我们首先需要知道索引,和列表这类数据一样

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

#b的值为2

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])
b = a[1][2]

#b的值为7

矩阵的遍历

对于一位矩阵,可以和列表一样遍历

a = np.array([1, 2, 3, 4])
for i in a:
	print(i)

会逐个打印1,2,3,4

对于多维的矩阵,有两种遍历方法

第一种:将多维矩阵转换为一维的矩阵

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])

#使用flat函数将a转换为一维的

b = a.flat
for i in b:
	print(i)

第二种:通过索引组成双循环逐行打印

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])

#此处len(a)计算的是a的行数
for i in range(len(a)):
	#此处len(a[0])代表第一行中有多少元素
	for j in range(len(a[0])):
		print(a[i][j])

矩阵的分片

矩阵的分片是根据索引来进行分片的

对于一维矩阵,通过 这个符号,可以选定范围,如果没有后范围,那么就是将前范围一直到最后打印出来

a = np.array([1, 2, 3, 4])
b = a[1:]

此时b的值就是 [2, 3, 4],代表从第二个数字一直到最后

a = np.array([1, 2, 3, 4])
b = a[1:3]

此时b的值就是 [2, 3],代表从第二个数字到第三个数字

它是不包含尾部数字的,也就是说[1:3]其实只能输出“第1号”到“第2号”

如果想要倒序输出,那么就需要在后范围改为**:-1**

a = np.array([1, 2, 3, 4])
b = a[::-1]
#打印b,得到[4, 3, 2, 1]

#也可以选中开始倒序的位置
b = a[1::-1]
#那么结果将从第二个数开始倒序
#b的值为[2, 1]

对于多维矩阵,也是类似的

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])
b = a[0:2,1:3] 

表示打印第一行、第二行中,第二列、第三列。

此时b就是
b = [ 2 3 6 7 ] b=\begin{bmatrix} 2 &3 \\ 6&7 \\ \end{bmatrix} b=[2637]
它同样不包含最后一位

当需要打印某一列或者某一行的全部时,只填一个 : 即可

a = np.array([[1, 2, 3, 4],[5, 6, 7, 8]])
b = a[0:1,:] 

此时b的值就是 [1, 2, 3, 4]

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值