python二维数组操作输出指定元素_Python第三十一课:Numpy数组操作

Introduction

接下来我们会学习如何改造数组方便我们使用,这里的改造包括对数组进行变形,翻转或者转置数组,连接数组,以及分割数组等等。

01

数组变形

可以实现数组变形的函数有好几个:

(1)最常见的也是最主要的就是我们之前提到过的reshape函数,可以将数组从一个形状转变成另外一个不同的形状。

(2)有时候我们想让高维数组展开成一维,那么我们可以使用flatten函数。先建好一个数组A,然后输出A.flatten()就可以完成降维。当然,我们可以选择展开式的秩序order。如果order='F',就是按列展开;如果order='C',就是按行展开。

(3)另外一个将数组展开铺平的函数叫ravel函数,它和flatten功能其实差不多,而且默认的展开顺序也是order='C',即按行展开。如果选择order='F'就是按列展开。

我们用几个例子来分别讲解这三个函数:

原始数组A是一个从0到11的一维数组;B是通过reshape函数改造成2*6的二维数组;C和D分别从B展开降到一维。其中C是按列顺序降维,而D是按照行顺序。我们看一下运行结果:

02

数组翻转

从数学角度而言,二维数组就是矩阵。在矩阵操作中,有一项叫转置,是将矩阵元素位置的行列互换,比如原来在(1,2)这个位置的元素,会和(2,1)这个位置的元素进行互换。在Numpy中我们有两种方式来实现数组的翻转:

(1)transpose函数,将被翻转目标A放到函数中,像这样np.transpose(A)就可以了。

(2)第二种办法更加简便,直接在目标数组A后面加个.T就行了。

A是一个4*2的数组,B和C分别通过两种方式翻转A,虽然函数不同,但是结果却是一样的:

03

数组连接

连接数组顾名思义是将两个或多个数组按照一定的方式连接起来,常用的数组连接有一下几种函数:

(1)concatenate函数,使用方式是把被连接的数组依次放进去,用逗号隔开,再用括号括起来;还有一个参数axis来指定按照哪一个轴连接。axis默认值是0,意思是沿着第一个轴连接,如果你设置成1,那么就是沿着第二个轴连接。

(2)stack函数,它和concatenate函数有一点不同。stack函数更多是一种堆叠,会在原来的维度上增加一个维度;而concatenate不会增加维度。

(3)hstack函数,它是stack函数的变种,其中h的意思是horizontal,水平的。顾名思义,它会将数组按水平的方式连接。关键是hstack不像stack一样增加维度,这一点是很好的。

(4)vstack函数,也是stack函数的变种,其中v的意思是vertical,垂直的。顾名思义,它会将数组按竖直的方式连接。

A和B都是2*2的数组,我们分别用四个函数去连接它们。第一个是concatenate函数,axis=1表示沿着第二个轴,也就是水平连接;第二个是stack函数,同样是沿着第二个轴,在这里我们省略了axis参数;第三个是hstack,竖直方向连接;第四个是vstack,水平方向连接。

运行结果:

注意到第二个打印结果是一个三维数组,这种连接方式不是很常用;而concatenate当axis=1时就相当于hstack,axis=0时就相当于vstack函数。

04

数组分割

数组分割相当于数组连接的逆向操作,将一个大数组分割成好几个数组。常用的函数有三个:

(1)split函数,这个函数有三个参数。第一个参数ary就是被分割的数组,第二参数叫indices_or_sections:果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭),第三个参数axis是按照哪个轴切分。

(2)hsplit函数,水平方向上切分。

(3)vsplit函数,竖直方向上切分。

A是一个4*4的二维数组,我们用了三种方式去分割。大家猜一猜有没有哪两个分割结果会一样?

运行结果:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
numpy数组元素周围的操作可以通过以下几种方式实现: 1. 切片操作:可以使用numpy数组的切片操作来获取数组元素的周围元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下切片操作: ```python arr[i-1:i+2, j-1:j+2] ``` 这将返回一个3x3的子数组,其中心元素为arr[i,j],周围的8个元素为该子数组的其余元素。 2. 使用numpy.pad()函数:numpy.pad()函数可以用来在数组的边缘添加一个或多个值,从而扩展数组的大小。可以使用该函数来添加额外的行和列,然后通过索引访问周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python padded_arr = np.pad(arr, ((1, 1), (1, 1)), mode='constant') surrounding = padded_arr[i:i+3, j:j+3] ``` 这将在数组的边缘添加一行和一列,并使用常量值填充这些额外的元素。然后可以使用切片操作来获取中心元素周围的元素。 3. 使用numpy.roll()函数:numpy.roll()函数可以用来沿着给定轴滚动数组元素。可以使用该函数来将数组的行和列进行滚动,从而获取周围的元素。 例如,对于一个二维数组arr,要获取第i行第j列元素周围的元素,可以使用如下代码: ```python rows, cols = arr.shape row_indices = np.arange(i-1, i+2) % rows col_indices = np.arange(j-1, j+2) % cols surrounding = arr[row_indices][:, col_indices] ``` 这将将第i行向上和向下滚动一行,并将第j列向左和向右滚动一列,从而获取中心元素周围的元素。使用模运算可以确保在数组的边缘滚动时正确处理索引。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值