優美精準的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/zh-hant/n/324898.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ACNXP的頭像ACNXP
上一篇 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

發表回復

登錄後才能評論