Numpy的切片和索引

取行

首先创建一个三行四列的数组用于实验分析数据

import numpy as np
t1=np.arange(12).reshape((3,4))
print(t1)

在这里插入图片描述
取指定完整行

print(t1[1,]) # 表示显示第2行的数据,数组的行列均从0开始
# 逗号前表示行,逗号后表示列
# 不指定列即代表取完整行
out:[4 5 6 7]

取连续完整行

print(t1[1:,]) # 表示显示第二行之后的所有行数据
# 冒号:代表连续
out:[[ 4  5  6  7]
     [ 8  9 10 11]]

取不连续的完整行

print(t1[[0,2],])   #显示第一行和第三行完整数据
# [指定行号用逗号隔开]
out:[[ 0  1  2  3]
     [ 8  9 10 11]]

取列

取指定完整列

print(t1[:,2]) # 显示第二列数据
# 我自己把这个:冒号的理解为遍历行,然后显示第一行中第三列的数据
out:[ 2  6 10]

取连续完整列

print(t1[:,0:]) #显示每行中第0列,1列,2列的数据
out:[[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]

取不连续的多列

print(t1[:,[0,2]]) #显示每行中,第一列和第二列的数据
out:[[ 0  2]
     [ 4  6]
     [ 8 10]]

取行和列

取指定行指定列

print(t1[2,3]) #取出第三行第四行的数据
out:11

取多行多列

print(t1[1:3,2:3]) # 显示行列交叉的点
# 注意:这里的行列的范围是包行不包列
# 即第二行第三行和第三列交差的点

在这里插入图片描述
取多个不相邻的点

print(t1[[0,2],[0,1]]) # (0,0)和(2,1)这两个点的值
out:[0 9]

批评指正:

希望你能从这些反馈中获得启发。如果有任何疑问或需要进一步探讨的地方,随时可以沟通。我相信通过共同的努力,我们能够不断提升,取得更好的成果。

### 关于 NumPy 切片索引的练习题 #### 示例一:基础切片操作 考虑创建一个简单的二维数组并执行基本的切片操作。 ```python import numpy as np n = np.arange(12).reshape((4, 3)) print("原始数组:") print(n) # 获取前两行的所有列 first_two_rows_all_columns = n[:2, :] print("\n前两行的所有列:") print(first_two_rows_all_columns) ``` 此代码展示了如何通过指定起始位置、结束位置以及步长来选取特定范围内的元素[^2]。 #### 示例二:高级索引应用 下面的例子说明了更复杂的索引方式,比如按条件筛选数据点或访问不连续的位置。 ```python import numpy as np arr = np.array([[10, 20], [30, 40], [50, 60]]) # 使用布尔掩码进行过滤 mask = (arr % 2 == 0) even_elements = arr[mask] print("偶数值元素:") print(even_elements) # 访问非连续位置上的元素 indices_row = [0, 2] indices_col = [0, 1] selected_elements = arr[indices_row, indices_col] print("\n选定行列交叉处的元素:") print(selected_elements) ``` 上述例子中不仅包含了基于逻辑运算符构建的布尔型索引来挑选符合条件的数据项,还涉及到了利用列表形式给出的具体下标来进行多维空间内任意坐标的定位。 #### 示例三:广播机制下的赋值操作 当涉及到不同形状之间的算术计算时,“广播”这一特性允许较小维度的对象自动扩展到匹配较大对象尺寸的程度以便完成相应处理过程。这里展示了一个简单案例,在其中向量被加到矩阵上每一个对应位置上去形成新的结果集。 ```python import numpy as np matrix = np.ones((3, 3)) * 5 # 创建一个全为5的3x3矩阵 vector = np.array([1, 2, 3]) # 定义一个长度为3的一维数组 result = matrix + vector # 应用了广播原则后的相加操作 print("原矩阵加上向量的结果如下所示:") print(result) ``` 在这个实例里可以看到即使两者之间存在明显的结构差异——一个是三维表而另一个则是线性序列;但由于遵循着相同的规则所以仍然能够顺利完成预期的任务目标[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右拐三次就是左

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

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

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

打赏作者

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

抵扣说明:

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

余额充值