找项目网找项目网  2023-05-21 05:15 找项目网 隐藏边栏
导语: 上节课我们一起学习了Numpy的基本功能和它的部分基础知识。(7)再进一步,我们可以在上面的数组切片中间隔地选定元素:在线性代数中,转置矩阵是很常见的操作。NumPy数组有水平组合、垂直组合和深度组合等多种组合方式,我们将使用vstack、dstack、hstack、column_stack、row_stack以及concatenate函数来完成数组的组合。

python切片表达式_python方括号切片_python矩阵切片

上节课我们一起学习了Numpy的基本功能和它的部分基础知识。今天我们一起接着来学习剩下的部分。

5.一维数组的索引和切片

(1)一维数组的切片操作与Python列表的切片操作很相似。例如,我们可以用下标3~7来选取元素3~6:

a = np.arange(9)
a[3:7]

(2)也可以用下标0~7,以2为步长选取元素:

a[:7:2]

利用负数下标翻转数组:

a[::-1]

6.多维数组的切片和索引

(1)先用arange函数创建一个数组并改变其维度,使之变成一个三维数组,2×3×4的三维数组:可以形象地把它看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列。

b = arange(24).reshape(2,3,4)
b.shape

(2)我们可以用三维坐标来选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、第1行、第1列的房间(也可以说是第0层楼、第0行、第0列,这只是习惯问题),可以这样表示:

b[0,0,0]

(3)如果我们不关心楼层python矩阵切片,也就是说要选取所有楼层的第1行、第1列的房间,那么可以将第1个下标用英文标点的冒号:来代替:

b[:,0,0]

(4)选取第1层楼的所有房间:

b[0, :, :]

(5)多个冒号可以用一个省略号(...)来代替,因此上面的代码等价于:

b[0, ...]

(6)选取第1层楼、第2排的所有房间:

b[0,1]

(7)再进一步,我们可以在上面的数组切片中间隔地选定元素:

b[0,1,::2]

(8)如果要选取所有楼层的位于第2列的房间,即不指定楼层和行号,用如下代码即可:

b[...,1]

(9)类似地,我们可以选取所有位于第2行的房间,而不指定楼层和列号:

b[:,1]

(10)如果要选取第1层楼的所有位于第2列的房间,在对应的两个维度上指定即可:

b[0,:,1]

(11)如果要选取第1层楼的最后一列的所有房间,使用如下代码:

b[0,:,-1]

(12)如果要反向选取第1层楼的最后一列的所有房间,使用如下代码:

b[0,::-1, -1]

(13)在该数组切片中间隔地选定元素:

b[0,::2,-1]

(14)如果在多维数组中执行翻转一维数组的命令,将在最前面的维度上翻转元素的顺序,在我们的例子中将把第1层楼和第2层楼的房间交换:

b[::-1]

(15)从数组中抽取元素,np.extract

· 生成选择偶数元素的条件变量:

a = np.arange(7)
condition = (a % 2) == 0
np.extract(condition, a)

· 使用nonzero函数抽取数组中的非零元素:

np.nonzero(a)

7.改变数组的维度

(1)ravel 我们可以用ravel函数完成展平的操作:

b.ravel()

(2)flatten 这个函数恰如其名,flatten就是展平的意思,与ravel函数的功能相同。

不过,flatten函数会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图(view):

b.flatten()

(3)用元组设置维度: 除了可以使用reshape函数,我们也可以直接用一个正整数元组来设置数组的维度,如下所示:

b.shape = (6,4)

(4)transpose 在线性代数中,转置矩阵是很常见的操作。对于多维数组,我们也可以这样做:

b.transpose()

(5)resize和reshape函数的功能一样,但resize会直接修改所操作的数组:

b.resize((2,12))

8.数组的组合

NumPy数组有水平组合、垂直组合和深度组合等多种组合方式,我们将使用vstack、dstack、hstack、column_stack、row_stack以及concatenate函数来完成数组的组合。

a = arange(9).reshape(3,3)
b = 2 * a

(1)水平组合:hstack函数python矩阵切片,用concatenate函数来实现同样的效果

hstack((a, b))
concatenate((a, b), axis=1)

python方括号切片_python矩阵切片_python切片表达式

(2)垂直组合:vstack,将concatenate函数的axis参数设置为0即可实现同样的效果

vstack((a, b))
concatenate((a, b), axis = 0)

(3)深度组合:就是将一系列数组沿着纵轴(深度)方向进行层叠组合。举个例子,有若干张二维平面内的图像点阵数据,我们可以将这些图像数据沿纵轴方向层叠在一起,这就形象地解释了什么是深度组合。

dstack((a, b))

(4)列组合 column_stack函数对于一维数组将按列方向进行组合,于二维数组,column_stack与hstack的效果是相同的

np.column_stack((a,b))
hstack((a, b))

(5)行组合 当然,NumPy中也有按行方向进行组合的函数,它就是row_stack。对于两个一维数组,将直接层叠起来组合成一个二维数组。对于二维数组,row_stack与vstack的效果是相同的

row_stack((a,b))
vstack((a, b))

9.数组的分割

(1)水平分割:下面的代码将把数组沿着水平方向分割为3个相同大小的子数组:

调用split函数并在参数中指定参数axis=1

hsplit(a, 3)
split(a, 3, axis=1)

(2)垂直分割:vsplit函数将把数组沿着垂直方向分割:

调用split函数并在参数中指定参数axis=0

vsplit(a, 3)
split(a, 3, axis=0)

(3)深度分割 :dsplit函数将按深度方向分割数组。

c = arange(27).reshape(3, 3, 3)
dsplit(c, 3)

10.数组的属性

(1)shape和dtype属性以外,ndarray对象还有很多其他的属性

(2)ndim属性,给出数组的维数,或数组轴的个数:

print(b)
b.ndim

(3)size属性,给出数组元素的总个数,如下所示:

b.size

(4)itemsize属性,给出数组中的元素在内存中所占的字节数:

b.itemsize

(5)如果你想知道整个数组所占的存储空间,可以用nbytes属性来查看。这个属性的值其实就是itemsize和size属性值的乘积:

b.nbytes

b.size * b.itemsize

(6)T属性的效果和transpose函数一样,对于一维数组,其T属性就是原数组:

b.T

(7)在NumPy中,复数的虚部是用j表示的。例如,我们可以创建一个由复数构成的数组:

b = array([1.j + 1, 2.j + 3])

(8)real属性,给出复数数组的实部

b.real

(9)imag属性,给出复数数组的虚部

b.imag

———END———
限 时 特 惠:本站每日持续更新海量各大内部创业教程,一年会员只需128元,全站资源免费下载点击查看详情
站 长 微 信:jiumai99

1.本站内容观点不代表本站立场,并不代表本站赞同其观点和对其真实性负责 2.若作商业用途,请联系原作者授权,若本站侵犯了您的权益请 联系站长 进行删除处理 3.本站所有内容均来源于网络,仅供学习与参考,请勿商业运营,严禁从事违法、侵权等任何非法活动,否则后果自负
找项目网
找项目网 关注:0    粉丝:0
这个人很懒,什么都没写
扫一扫二维码分享
×
Dragon