当前位置: 首页 > news >正文

NumPy -数组索引与切片

数组索引与切片

目录

  • 一维数组索引
  • 多维数组索引
  • 高级索引
  • 布尔索引
  • 花式索引
  • 实际应用示例

一维数组索引

基本索引

import numpy as nparr = np.array([10, 20, 30, 40, 50])# 正索引
print(f"arr[0]: {arr[0]}")
print(f"arr[2]: {arr[2]}")
print(f"arr[-1]: {arr[-1]}")  # 最后一个元素
print(f"arr[-2]: {arr[-2]}")  # 倒数第二个元素

一维数组切片

import numpy as nparr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# 基本切片
print(f"arr[2:5]: {arr[2:5]}")        # [2 3 4]
print(f"arr[:5]: {arr[:5]}")          # [0 1 2 3 4]
print(f"arr[5:]: {arr[5:]}")          # [5 6 7 8 9]
print(f"arr[:]: {arr[:]}")            # 全部元素# 带步长的切片
print(f"arr[::2]: {arr[::2]}")        # [0 2 4 6 8]
print(f"arr[1::2]: {arr[1::2]}")      # [1 3 5 7 9]
print(f"arr[::-1]: {arr[::-1]}")      # 反转 [9 8 7 6 5 4 3 2 1 0]
print(f"arr[5:2:-1]: {arr[5:2:-1]}")  # [5 4 3]

多维数组索引

二维数组索引

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"数组:\n{arr}")# 访问单个元素
print(f"\narr[0, 0]: {arr[0, 0]}")    # 1
print(f"arr[1, 2]: {arr[1, 2]}")      # 6
print(f"arr[-1, -1]: {arr[-1, -1]}")  # 9# 访问整行
print(f"\narr[0]: {arr[0]}")          # [1 2 3]
print(f"arr[1, :]: {arr[1, :]}")      # [4 5 6]# 访问整列
print(f"\narr[:, 0]: {arr[:, 0]}")    # [1 4 7]
print(f"arr[:, 2]: {arr[:, 2]}")      # [3 6 9]

二维数组切片

import numpy as nparr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
print(f"数组:\n{arr}")# 行切片
print(f"\narr[0:2]:\n{arr[0:2]}")# 列切片
print(f"\narr[:, 1:3]:\n{arr[:, 1:3]}")# 行列同时切片
print(f"\narr[0:2, 1:3]:\n{arr[0:2, 1:3]}")# 步长切片
print(f"\narr[::2, ::2]:\n{arr[::2, ::2]}")

三维数组索引

import numpy as nparr = np.arange(24).reshape(2, 3, 4)
print(f"数组形状: {arr.shape}")
print(f"数组:\n{arr}")# 访问单个元素
print(f"\narr[0, 0, 0]: {arr[0, 0, 0]}")# 访问第一个二维数组
print(f"\narr[0]:\n{arr[0]}")# 访问所有第一行
print(f"\narr[:, 0, :]:\n{arr[:, 0, :]}")# 访问所有第一列
print(f"\narr[:, :, 0]:\n{arr[:, :, 0]}")

高级索引

整数数组索引

import numpy as nparr = np.array([10, 20, 30, 40, 50])# 使用整数数组索引
indices = np.array([0, 2, 4])
print(f"arr[{indices}]: {arr[indices]}")# 多维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"\n数组:\n{arr_2d}")# 选择特定行
rows = np.array([0, 2])
print(f"\n选择行 {rows}:\n{arr_2d[rows]}")# 选择特定行列组合
rows = np.array([0, 1])
cols = np.array([1, 2])
print(f"\n选择 (0,1) 和 (1,2):\n{arr_2d[rows, cols]}")

多维度整数数组索引

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"数组:\n{arr}")# 创建索引数组
rows = np.array([[0, 0], [2, 2]])
cols = np.array([[0, 2], [0, 2]])# 使用索引数组
result = arr[rows, cols]
print(f"\n索引结果:\n{result}")# 广播索引
rows = np.array([[0], [1], [2]])
cols = np.array([[0, 1, 2]])
result = arr[rows, cols]
print(f"\n广播索引结果:\n{result}")

布尔索引

基本布尔索引

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 创建布尔数组
mask = arr > 5
print(f"布尔掩码: {mask}")
print(f"满足条件的元素: {arr[mask]}")# 直接使用条件
print(f"\n大于5的元素: {arr[arr > 5]}")
print(f"偶数: {arr[arr % 2 == 0]}")
print(f"在3和8之间的元素: {arr[(arr > 3) & (arr < 8)]}")

多维数组布尔索引

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"数组:\n{arr}")# 创建布尔掩码
mask = arr > 5
print(f"\n布尔掩码:\n{mask}")# 使用掩码选择元素
print(f"\n大于5的元素: {arr[mask]}")# 条件修改
arr[arr > 5] = 0
print(f"\n修改后:\n{arr}")

多条件组合

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 使用 & (and) 和 | (or)
print(f"大于3且小于8: {arr[(arr > 3) & (arr < 8)]}")
print(f"小于3或大于8: {arr[(arr < 3) | (arr > 8)]}")# 使用 ~ (not)
mask = arr > 5
print(f"不大于5的元素: {arr[~mask]}")

花式索引

使用列表索引

import numpy as nparr = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])# 使用列表索引
indices = [0, 2, 5, 7]
print(f"使用列表索引: {arr[indices]}")# 多维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
print(f"\n数组:\n{arr_2d}")# 选择特定行
rows = [0, 2, 3]
print(f"\n选择行 {rows}:\n{arr_2d[rows]}")# 选择特定列
cols = [0, 2]
print(f"\n选择列 {cols}:\n{arr_2d[:, cols]}")

高级花式索引

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(f"数组:\n{arr}")# 选择对角线元素
diag_indices = [0, 1, 2]
print(f"\n对角线元素: {arr[diag_indices, diag_indices]}")# 选择特定位置的元素
rows = [0, 1, 2]
cols = [2, 1, 0]
print(f"\n选择 (0,2), (1,1), (2,0): {arr[rows, cols]}")# 使用 meshgrid 创建索引
rows, cols = np.meshgrid([0, 2], [1, 2])
print(f"\nrows:\n{rows}")
print(f"cols:\n{cols}")
print(f"结果:\n{arr[rows, cols]}")

实际应用示例

示例 1:数据筛选

import numpy as np# 创建学生成绩数据
scores = np.array([85, 92, 78, 96, 88, 75, 90, 87, 82, 95])
names = np.array(['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace', 'Henry', 'Ivy', 'Jack'])# 筛选高分学生(>90)
high_scores = scores > 90
print(f"高分学生:")
print(f"姓名: {names[high_scores]}")
print(f"成绩: {scores[high_scores]}")# 筛选中等成绩学生(80-90)
medium_scores = (scores >= 80) & (scores <= 90)
print(f"\n中等成绩学生:")
print(f"姓名: {names[medium_scores]}")
print(f"成绩: {scores[medium_scores]}")

示例 2:图像处理中的区域选择

import numpy as np# 模拟图像 (高度, 宽度)
image = np.random.randint(0, 255, size=(100, 100), dtype=np.uint8)
print(f"原始图像形状: {image.shape}")# 选择中心区域
center_y, center_x = 50, 50
radius = 20
y, x = np.ogrid[:100, :100]
mask = (x - center_x)**2 + (y - center_y)**2 <= radius**2# 提取圆形区域
circle_region = image[mask]
print(f"圆形区域元素数量: {len(circle_region)}")# 在掩码区域进行操作
image_masked = image.copy()
image_masked[mask] = 255  # 将圆形区域设为白色

示例 3:时间序列数据选择

import numpy as np# 创建时间序列数据
dates = np.arange('2024-01-01', '2024-12-31', dtype='datetime64[D]')
values = np.random.randn(len(dates)).cumsum() + 100# 选择特定月份的数据
january = dates[dates.astype('datetime64[M]') == np.datetime64('2024-01')]
january_values = values[dates.astype('datetime64[M]') == np.datetime64('2024-01')]print(f"1月份数据点数量: {len(january_values)}")# 选择特定条件的数据
high_values = values > values.mean() + values.std()
print(f"高于平均值+标准差的数据点数量: {high_values.sum()}")

总结

数组索引与切片要点:

  1. 基本索引:正索引和负索引
  2. 切片:start:stop:step 语法
  3. 多维索引:逗号分隔的索引
  4. 高级索引:整数数组索引
  5. 布尔索引:使用条件筛选
  6. 花式索引:使用列表或其他数组索引

http://www.dtcms.com/a/583401.html

相关文章:

  • 【Delphi】更换和提取exe文件主图标小工具
  • 个人艺术作品网站建设策划书上海 网站设计公司
  • 贵阳网站制作贵阳网站建设哪家好网站接广告能赚多少钱
  • UV快速入门
  • 基于ROS2的语义格栅地图导航
  • 常熟做网站公司排名博客网
  • 广东建设职业技术学院网站国人wordpress企业主题
  • solidity中的接口和继承
  • 网站建设与维护高职wordpress站群主题
  • 网站改版 翻译制作网站用什么语言
  • 网页代理网站wordpress插件的页面文件
  • 咸阳做网站公司网站首页设计费用
  • 品牌网站如何建设大学生建设什么网站好
  • 哈尔滨+做网站公司有哪些wordpress自定义DIV样式
  • 电子商务网站建设汇报PPT网站右下角广告代码
  • 在凡科上做的网站无法加载出来网站开发的缓存技术
  • GUI自动化测试--自动化测试的意义和应用场景
  • ZCC7151S替代LTC7151S:高效静默,赋能未来电源设计——20V/15A同步降压稳压解决方案​
  • cocos打包的web-mobile(web手机端)在浏览器无法运行的原因和解决方法
  • 多种时间序列预测算法的MATLAB实现
  • 营销网站和展示型网站昆明做网站哪家公司好
  • 网站建设w亿玛酷1负责手机做炫光图头像的网站
  • 【JAVA虚函数与多态的底层实现】
  • 只做男士衬衫的网站建设网站公司怎么分工
  • 麦德龙网站建设目标网站页面布局用什么做
  • 3.1、Python-列表
  • 网站设计师培训做网站域名怎么选有利于seo
  • 餐饮网站建设方案书炫客网站建设
  • ABB RobotStudio许可功能premium不可用(从布局创建系统不成功)解决办法
  • 网站设置反爬虫的主要原因建筑网格布是用什么材料