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

在毕设中学习02——numpy多维数组的切片,形态变化,维度交换2022.5.21文章目录关于matplotlib.pyplotcv2工具python课本学习构建三维数组,并按照指定维度输出生成一组随机数,摆放为指定矩阵形式Python中range(start,stop,步长)生成指定范围,指定步长的一组数多维数组切片——过滤信息多维矩阵的维度顺序变换多维矩阵的切片多维矩阵的形态变化关于matplotlib.pyplotcv2工具两篇博客的学习文献学习python课本学习构建三维数组,并按照指定维度输出import numpy as np#a=np.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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(新的形状),改变原数组

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168455.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号