在毕设中学习02——numpy多维数组的切片,形态变化,维度交换

本文介绍了Python中numpy库在处理多维数组时的各种操作,包括构建三维数组、随机数生成、多维数组切片、维度变换以及矩阵形态调整。通过实例展示了如何按照指定维度输出、过滤信息以及进行矩阵的重塑等操作,为理解和应用numpy提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2022.5.22

构建三维数组,并按照指定维度输出

import numpy as np
#
a=np.arange(0,60,1,dtype=np.floating).reshape(3,4,5)
print(a)
print(a[0])
print(a[0][0])

第一个输出

[[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]]

[[20. 21. 22. 23. 24.]
[25. 26. 27. 28. 29.]
[30. 31. 32. 33. 34.]
[35. 36. 37. 38. 39.]]

[[40. 41. 42. 43. 44.]
[45. 46. 47. 48. 49.]
[50. 51. 52. 53. 54.]
[55. 56. 57. 58. 59.]]]

第二个输出

[[ 0. 1. 2. 3. 4.]
[ 5. 6. 7. 8. 9.]
[10. 11. 12. 13. 14.]
[15. 16. 17. 18. 19.]]

第三个输出

[0. 1. 2. 3. 4.]

生成一组随机数,摆放为指定矩阵形式

a=np.random.randint(15,40,size=(10,10,3))
print(a)
print(a.size)

Python中range(start,stop,步长)

为什么Python中range(10)输出的是range(0, 10)?

因为range()函数返回的是生成器对象。
生成器对象直接打印出不来内容,只会返回对象信息。
想要看生成器具体会产生什么,可以使用list()、或者tuple()函数转换。

以 list()为例:list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

list(range(10)) #从0开始到10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list(range(1,11)) #从1开始到11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(range(0,30,5)) #步长为 5
[0, 5, 10, 15, 20, 25]
list(range(0,30,3)) #步长为 3
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
list(range(0,-10,-1)) #步长为负数时候为从第一个数往随后一个数(输出过程和正常的相比,在坐标轴上是反方向输出的)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

生成指定范围,指定步长的一组数

a=np.arange(1,20,2)

import numpy as np
a=np.arange(1,20,2)
print(type(a))
print(a)
print(list(a))

#输出
<class 'numpy.ndarray'>
[ 1  3  5  7  9 11 13 15 17 19]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

注意这个np.arange()方法的返回值是<class ‘numpy.ndarray’>类型的数据,不是列表

数据之间没有逗号,可以理解为是一个矩阵

所以针对这个返回可以输出其shape

可以重构其shape

print(a.shape)
print(a.reshape(2,5))

#输出
(10,)
[[ 1  3  5  7  9]
 [11 13 15 17 19]]

多维数组切片——过滤信息

import numpy as np

#按照表达式j*10+i,生成6*6矩阵
a=np.array( [[j*10+i for i in range(6)]for j in range(6)] )
print(a)
#多维数组的切片操作
print(a[2,3:5])
print(a[2:5,2:5])

#输出
[[ 0  1  2  3  4  5]
 [10 11 12 13 14 15]
 [20 21 22 23 24 25]
 [30 31 32 33 34 35]
 [40 41 42 43 44 45]
 [50 51 52 53 54 55]]

[23 24]

[[22 23 24]
 [32 33 34]
 [42 43 44]]

进程已结束,退出代码0

多维矩阵的维度顺序变换

假设 a 数组是shape为(7352, 9, 128, 1)的numpy数组

方法一:

如果想要数组变换形态,比如使它变成(9, 7352, 128, 1)可以使用transpose方法

b=a.transpose((1,0,2,3))
#解释:1-0-2-3指的就是变换数组的维度,明显正常的维度是0-1-2-3-4....
#此处:0-1交换了位置,也就是变换了第一维度和第二维度的顺序
#可用于改变数组形态方便神经网络输入

方法二:

a.swapaxes(ax1,ax2) 或者np.swapaxes(a,1,2)

多维矩阵的切片

  • 可以获取任意维度的任意片段数据

    比如这个a的第二维度的9表示数据有9个通道(就像RGB图像有3个通道)

    我只要第前三个通道的数据,可以这么写

    c=a[,[0:3],]
    c的形状就变成了(7352, 3, 128, 1)
    

    有时候需要跨通道获取数据比如我只要1,3,5,6四个通道的数据可以这么写

d=a[,[0,2,4,5],]
d的形状就变成了(7352, 4, 128, 1)

多维矩阵的形态变化

a.reshape(新的形状),返回新数组

a.resize(新的形状),改变原数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fortunate.F

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值