优美精准的numpy切片操作技巧

从事数据科学和机器学习的人都知道,numpy是必备的工具之一。在numpy中,切片(slicing)是经常用到的操作之一。简单的切片是很容易掌握的,但是当涉及到多维数组,或者需要高效地选择元素时,我们就需要更加高效和优美的numpy切片技巧。

一、基础的切片操作

要理解高级切片技巧,首先需要掌握numpy基础切片操作。以一维数组为例:

import numpy as np

array = np.array([1, 2, 3, 4, 5])
# 选择第2到第4个元素
array[1:4] #=> array([2, 3, 4])
# 从第2个元素起,每隔一个取一个元素
array[1:4:2] #=> array([2, 4])
# 可以用负数索引
array[-2:] #=> array([4, 5])

在切片操作中,冒号(:)用于指定选择范围,第一个数表示起始位置(包含),第二个数表示结束位置(不包含),第三个数表示步长。

对于多维数组,每个维度可以分别进行切片:

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
# 选择第1行
array[0] #=> array([1, 2, 3])
# 选择第1、2行
array[:2] #=> array([[1, 2, 3],
               [4, 5, 6]])
# 选择第2列
array[:, 1] #=> array([2, 5, 8])
# 选择第1、2行,第2、3列
array[:2, 1:] #=> array([[2, 3],
                        [5, 6]])

二、布尔型切片

numpy允许使用布尔型数组进行切片。例如,我们可以选择满足某个条件的所有元素。

array = np.array([1, 2, 3, 4, 5])
mask = array % 2 == 0
array[mask] #=> array([2, 4])

对于多维数组,我们可以使用多维布尔型数组进行切片。例如,选择所有大于5的元素:

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
mask = array > 5
array[mask] #=> array([6, 7, 8, 9])

三、花式索引

花式索引(fancy indexing)指的是通过整数数组或布尔型数组选择数组中的元素。与切片不同,花式索引会复制选取的元素,而不是引用它们。

array = np.array([1, 2, 3, 4, 5])
# 选择第1、3、5个元素
indices = [0, 2, 4]
array[indices] #=> array([1, 3, 5])

对于多维数组,我们可以使用多个整数数组或一个布尔型数组选择元素。例如,选择第1、3行和第2、3列的元素:

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
# 选择第1、3行和第2、3列的元素
indices_row = [0, 2]
indices_col = [1, 2]
array[indices_row][: ,indices_col] #=> array([[2, 3],
                                          [8, 9]])

四、组合切片技巧

最后,我们可以将基础切片、布尔型切片和花式索引结合起来,实现更加高效、灵活的切片操作。

例如,选择第偶数行,第奇数列的元素:

array = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
])
# 选择第偶数行,第奇数列
mask_row = np.array([False, True, False, True])
mask_col = np.array([True, False, True])
array[mask_row][:, mask_col] #=> array([[2],
                                    [8]])

五、总结

在numpy中,切片是一种非常基础和常用的操作。高效、优美的切片技巧可以大大提高代码的可读性和执行效率。在实践中,我们应该灵活地运用基础切片、布尔型切片、花式索引和组合切片技巧,根据不同情况选择最合适的方式。

原创文章,作者:ACNXP,如若转载,请注明出处:https://www.506064.com/n/324898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ACNXPACNXP
上一篇 2025-01-13 13:23
下一篇 2025-01-13 13:23

相关推荐

  • Python切片索引越界是否会报错

    解答:当对一个字符串、列表、元组进行切片时,如果索引越界会返回空序列,不会报错。 一、切片索引的概念 切片是指对序列进行操作,从其中一段截取一个新序列。序列可以是字符串、列表、元组…

    编程 2025-04-29
  • Codemaid插件——让你的代码优美整洁

    你是否曾为了混杂在代码里的冗余空格、重复代码而感到烦恼?你是否曾因为代码缺少注释而陷入困境?为了解决这些问题,今天我要为大家推荐一款Visual Studio扩展插件——Codem…

    编程 2025-04-28
  • Python元组切片操作用法介绍

    Python中的元组是一种不可变的序列,可以用于保存一组数据。元组一旦创建,就无法修改其中的元素,但我们可以通过元组切片操作来获取元组中的部分数据,这是元组操作中非常常见的一种操作…

    编程 2025-04-27
  • Python数据容器切片

    本文将从多个方面详细阐述Python数据容器切片的应用、技巧和方法。 一、切片的基本操作 Python的数据容器包括字符串、列表、元组、字典等,而切片是对这些容器进行子序列提取的常…

    编程 2025-04-27
  • Cut 几列: 从数据切片到逻辑建模

    本文将从数据、数据处理、逻辑建模等多个方面详细阐述 Cut 几列。同时,提供完整的代码示例,以便读者深入理解。 一、数据切片 Cut 几列是一个常用的数据处理工具,主要用于将数据按…

    编程 2025-04-27
  • Grep 精准匹配:探究匹配原理和常见应用

    一、什么是 Grep 精准匹配 Grep 是一款在 Linux 系统下常用的文本搜索和处理工具,精准匹配是它最常用的一个功能。Grep 精准匹配是指在一个文本文件中查找与指定模式完…

    编程 2025-04-25
  • Python切片完全手册

    一、Python切片操作 Python中切片操作是提取字符串、列表、元组等可迭代对象的一部分。通过使用切片操作符“:”实现。 下面是一个Python切片的基本语法示例: s[sta…

    编程 2025-04-22
  • Slice(1)——Python中的切片函数

    一、基础概念 slice(切片)是Python中常用的序列操作,可以用于切割序列、复制序列等操作。Slice()函数可以用于所有可迭代对象(字符串、列表、元组),并且返回一个新的切…

    编程 2025-04-18
  • Java BigDecimal累加操作示例,精准计算不丢失精度

    一、什么是BigDecimal? 在Java中,浮点数在进行运算时可能会失去一定的精度,这是因为浮点数的本质是一种近似值,无法表示所有的数字。而BigDecimal类则是为了解决这…

    编程 2025-04-13
  • Python字符串切片的多个方面详解

    一、基本概述 Python字符串切片是指通过指定切片的开始位置和结束位置来抽取字符串中的一部分。在Python中,字符串是不可变的,也就是说不能修改或删除字符串中的某个字符,但可以…

    编程 2025-04-12

发表回复

登录后才能评论