Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例

Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例

目录

Numpy中对数据进行切片读取是一项基本且重要的技能,上次通过博文:使用NumPy工具包生成一维、二维以及多维数组方法和具体举例介绍了使用NumPy工具包生成一维、二维以及多维数组方法和具体举例。本文将通过程序和运行验证,来熟悉对Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例。

〇、数据准备

0.1 一个五行五列array数据A的准备

import numpy as np
A=np.array([[21,53,78,90,10],[16,65,29,-6,186],[9,898,7,349,2],[82,62,5,48,3],[857,595,76,522,341]])
print(A)

运行结果:

[[ 21  53  78  90  10]
 [ 16  65  29  -6 186]
 [  9 898   7 349   2]
 [ 82  62   5  48   3]
 [857 595  76 522 341]]

0.2 一个四行五列array数据B的准备

B=np.arange(1,21,1).reshape(4,5)
print(B)

运行结果:

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

一、行数据切片

1.1、单行数据切片方法举例

(1) 任意一行数据切片
#获取第0行数据
A[0,:]

运行结果:

array([21, 53, 78, 90, 10])
#第4行数据
A[4,:]

运行结果:

array([857, 595,  76, 522, 341])
(2)从尾行往回切的单行切片
A[-1,:]  #最后一行数据切片

运行结果:

array([857, 595,  76, 522, 341])
A[-2,:]  #最后第二行数据切片

运行结果:

array([82, 62,  5, 48,  3])

1.2、多行数据切片方法举例

(1) 任意多行数据的切片
A[(0,3,4),:]   #注意要使用圆括号将多个行号括起来

运行结果:

array([[ 21,  53,  78,  90,  10],
       [ 82,  62,   5,  48,   3],
       [857, 595,  76, 522, 341]])
(2) 连续多行数据的切片
A[1:4,:]

运行结果:

array([[ 16,  65,  29,  -6, 186],
       [  9, 898,   7, 349,   2],
       [ 82,  62,   5,  48,   3]])
(3)等间隔多行数据的切片
(a) 从头行开始的,所有行的等间隔多行数据的切片
A[::2,:]   #本例中等价于A[0::2,:]

运行结果:

array([[ 21,  53,  78,  90,  10],
       [  9, 898,   7, 349,   2],
       [857, 595,  76, 522, 341]])
A[0::2,:]

运行结果:

array([[ 21,  53,  78,  90,  10],
       [  9, 898,   7, 349,   2],
       [857, 595,  76, 522, 341]])
(b)从尾行开始的,所有行的等间隔多行数据的切片
A[::-2,:]   #负号表示反方向  ,本例中等价于A[-1::-2,:]

运行结果:

array([[857, 595,  76, 522, 341],
       [  9, 898,   7, 349,   2],
       [ 21,  53,  78,  90,  10]])
A[-1::-2,:]

运行结果:

array([[857, 595,  76, 522, 341],
       [  9, 898,   7, 349,   2],
       [ 21,  53,  78,  90,  10]])
©从指定行开始正向等间隔多行数据的切片
A[1::2,:]

运行结果:

array([[ 16,  65,  29,  -6, 186],
       [ 82,  62,   5,  48,   3]])
(d)从指定行开始反向等间隔多行数据的切片
A[4::-2,:] #负号表示反方向

运行结果:

array([[857, 595,  76, 522, 341],
       [  9, 898,   7, 349,   2],
       [ 21,  53,  78,  90,  10]])

二、列数据切片

2.1、单列数据切片方法举例

(1) 任意一列数据切片
#获取第2列数据
A[:,2]

运行结果:

array([78, 29,  7,  5, 76])
(2) 从尾列往回切的单个列数据切片
A[:,-1]    #最后一列数据

运行结果:

array([ 10, 186,   2,   3, 341])
A[:,-2]    #最后第二列数据

运行结果:

array([ 90,  -6, 349,  48, 522])

2.2、多列数据切片方法举例

(1) 任意多列数据的切片
A[:,(0,1,4)]   #注意要使用圆括号将多个列号括起来

运行结果:

array([[ 21,  53,  10],
       [ 16,  65, 186],
       [  9, 898,   2],
       [ 82,  62,   3],
       [857, 595, 341]])
(2) 连续多列数据的切片
A[:,1:4]

运行结果:

array([[ 53,  78,  90],
       [ 65,  29,  -6],
       [898,   7, 349],
       [ 62,   5,  48],
       [595,  76, 522]])
(3)等间隔多列数据的切片
(a) 从头列开始的,所有列的等间隔多列数据的切片
A[:,::2]   #本例等价于A[:,0::2] 

运行结果:

array([[ 21,  78,  10],
       [ 16,  29, 186],
       [  9,   7,   2],
       [ 82,   5,   3],
       [857,  76, 341]])
A[:,0::2] 

运行结果:

array([[ 21,  78,  10],
       [ 16,  29, 186],
       [  9,   7,   2],
       [ 82,   5,   3],
       [857,  76, 341]])
(b) 从尾列开始的往回,所有列的等间隔多列数据的切片
A[:,::-2]   #从最后一列开始,本例等价于A[:,-1::-2]  ,例如下面的计算结果

运行结果:

array([[ 10,  78,  21],
       [186,  29,  16],
       [  2,   7,   9],
       [  3,   5,  82],
       [341,  76, 857]])
A[:,-1::-2]  #负号表示反方向

运行结果:

array([[ 10,  78,  21],
       [186,  29,  16],
       [  2,   7,   9],
       [  3,   5,  82],
       [341,  76, 857]])
©从指定列开始到指定列止,正向等间隔多列数据的切片
A[:,1:4:2]   #从标号为1的列开始,到标号为4的列止,每隔2切片

运行结果:

array([[ 53,  90],
       [ 65,  -6],
       [898, 349],
       [ 62,  48],
       [595, 522]])
(d)从指定列开始反向到指定列止,等间隔多列数据的切片
A[:,-2:0:-2]   #从最后第二列开始往回切,到标号为0的列止  本例A数据的情景下等价于A[:,3::-2] 例如下面的计算结果

运行结果:

array([[ 90,  53],
       [ -6,  65],
       [349, 898],
       [ 48,  62],
       [522, 595]])
A[:,3::-2] 

运行结果:

array([[ 90,  53],
       [ -6,  65],
       [349, 898],
       [ 48,  62],
       [522, 595]])

三、行与列结合的数据切片

import numpy as np
A=np.array([[21,53,78,90,10],[16,65,29,-6,186],[9,898,7,349,2],[82,62,5,48,3],[857,595,76,522,341]])
print(A)

运行结果:

[[ 21  53  78  90  10]
 [ 16  65  29  -6 186]
 [  9 898   7 349   2]
 [ 82  62   5  48   3]
 [857 595  76 522 341]]

3.1 对于单个数据切片

A[0,0]

运行结果:

np.int64(21)
A[2,4]

运行结果:

np.int64(2)

3.2 对于单行,多列数据切片

A[2,(0,1,3,4)]

运行结果:

array([  9, 898, 349,   2])

3.3 对于单列,多行数据切片

A[(2,3,4),3]

运行结果:

array([349,  48, 522])

3.4 对于多列,多行数据切片

(1)行或列的等间隔切片

例子1:

A[(2,3,4),1:3:1]      # 本例中等价于A[(2,3,4),1:3]  或者A[2:5:1,1:3]  

运行结果:

array([[898,   7],
       [ 62,   5],
       [595,  76]])
A[(2,3,4),1:3]  

运行结果:

array([[898,   7],
       [ 62,   5],
       [595,  76]])
A[2:5:1,1:3]  

运行结果:

array([[898,   7],
       [ 62,   5],
       [595,  76]])

例子2:

A[:,0:3:2]  #从标号为0的列,到标号为3的列,之间每个2切片

运行结果:

array([[ 21,  78],
       [ 16,  29],
       [  9,   7],
       [ 82,   5],
       [857,  76]])
(2)行和列的非等间隔切片

例子1:从B中切出array([[ 7, 9, 10],[17, 19, 20]]),如下图所示的位置的数。

在这里插入图片描述

B=np.arange(1,21,1).reshape(4,5)
B

运行结果:

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])
B[(1,3),:][:,(1,3,4)]   #采用先切出行,再切出列的分步切法,而不能使用B[(1,3),(1,3,4)],否则会出错。  

运行结果:

array([[ 7,  9, 10],
       [17, 19, 20]])

注意不能使用B[(1,3),(1,3,4)]代替B[(1,3),:][:,(1,3,4)]进行切片 ,否则会出错。

四、总结

Numpy中对数据进行切片读取是一项基本且重要的技能,本文通过程序和运行验证,对Numpy数据中的行切片、列切片以及行列结合的数据切片方法及具体代码举例,便于在今后的Numpy数据应用中熟练对数据进行灵活切片使用。

NumPy(Numerical Python)是Python中用于科学计算的重要库,提供了高性能的多维数组对象和数学函数。NumPy数组是这个库的核心数据结构,它是一个由相同类型的元素组成的多维网格。 下面是NumPy数组的一些重要用法和示例代码: 1. 创建数组 ```python import numpy as np # 创建一维数组 arr1 = np.array([1, 2, 3, 4, 5]) print(arr1) # 创建二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) print(arr2) # 创建全零数组 zeros_arr = np.zeros((2, 3)) print(zeros_arr) # 创建全一数组 ones_arr = np.ones((3, 2)) print(ones_arr) # 创建指定范围内的等差数组 range_arr = np.arange(0, 10, 2) print(range_arr) ``` 2. 数组操作 ```python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) # 获取数组形状 shape = arr.shape print(shape) # 获取数组维度 dim = arr.ndim print(dim) # 获取数组元素类型 dtype = arr.dtype print(dtype) # 访问数组元素 element = arr[0, 1] print(element) # 切片操作 sliced_arr = arr[:, :2] print(sliced_arr) # 数组转置 transposed_arr = arr.T print(transposed_arr) ``` 3. 数组运算 ```python import numpy as np arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) # 数组加法 addition = arr1 + arr2 print(addition) # 数组乘法 multiplication = arr1 * arr2 print(multiplication) # 数组平方 squared_arr = arr1 ** 2 print(squared_arr) # 数组平均值 average = np.mean(arr1) print(average) # 数组最大值和最小值 maximum = np.max(arr1) minimum = np.min(arr1) print(maximum, minimum) ``` 以上只是NumPy数组的一些重要用法,还有很多其他操作和函数可以用于数组的变换、统计、线性代数等。NumPy的文档提供了更详细的信息和示例代码,可以进一步学习和了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值