NumPy 分割與搜尋陣列詳解

小万哥丶發表於2024-05-16

NumPy 分割陣列

NumPy 提供了 np.array_split() 函式來分割陣列,將一個陣列拆分成多個較小的子陣列。

基本用法

語法:

np.array_split(array, indices_or_sections, axis=None)

array: 要分割的 NumPy 陣列。
indices_or_sections: 指定分割位置的整數列表或要包含每個子陣列的元素數量的列表。
axis: 可選引數,指定要分割的軸。預設為 0(即行分割)。

示例:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])

# 將陣列分割成 3 個子陣列
new_arrays = np.array_split(arr, 3)
print(new_arrays)  # 輸出:
                        # [array([1, 2]), array([3, 4]), array([5, 6])]

# 指定分割位置
new_arrays = np.array_split(arr, [2, 5])
print(new_arrays)  # 輸出:
                        # [array([1, 2]), array([3, 4]), array([5, 6])]

# 沿列分割
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
new_arrays = np.array_split(arr, 3, axis=1)
print(new_arrays)  # 輸出:
                        # [array([[1, 4, 7]]), array([[2, 5, 8]]), array([[3, 6, 9]])]

注意事項

如果 indices_or_sections 指定的分割位置超出陣列範圍,則會引發異常。
如果陣列元素數量不足以滿足分割要求,則會從末尾進行調整。
np.array_split() 返回一個包含子陣列的列表。

高階用法

除了基本用法之外,np.array_split() 還可以用於更復雜的分割操作:

使用掩碼進行分割: 您可以使用掩碼陣列來指示哪些元素應該包含在每個子陣列中。
不均勻分割: 您可以指定每個子陣列包含的元素數量,即使數量不均等。
沿著任意軸分割: 您可以使用 axis 引數指定要分割的軸。

例如,以下程式碼使用掩碼將陣列分割成兩個子陣列,第一個子陣列包含所有偶數元素,第二個子陣列包含所有奇數元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
mask = arr % 2 == 0
new_arrays = np.array_split(arr, mask)
print(new_arrays)  # 輸出:
                        # [array([2, 4, 6]), array([1, 3, 5])]

練習

使用 np.array_split() 將以下陣列 arr 沿行分割成 4 個子陣列,每個子陣列包含相等數量的元素。

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])

在評論中分享您的程式碼和輸出。

Sure, here is the requested Markdown formatted content:

NumPy 搜尋陣列

NumPy 提供了多種方法來搜尋陣列中的元素,並返回匹配項的索引。

基本用法:np.where()

語法:

np.where(condition)

condition:用於確定要查詢的元素的布林條件。

功能:

np.where() 逐個元素比較條件,並返回滿足條件的元素的索引。
它返回一個元組,其中包含一個或多個陣列,每個陣列表示滿足條件的元素的索引。

示例:

import numpy as np

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

# 查詢值為 4 的索引
indices = np.where(arr == 4)
print(indices)  # 輸出: (array([3, 5, 6]),)

# 查詢大於 5 的元素的索引
indices = np.where(arr > 5)
print(indices)  # 輸出: (array([6, 7, 8]),)

搜尋排序陣列:np.searchsorted()

語法:

np.searchsorted(array, value, side='left')

array:已排序的 NumPy 陣列。
value:要搜尋的值。
side:可選引數,指定搜尋方向。預設為 'left'(從左到右)。

功能:

np.searchsorted() 在排序陣列中執行二進位制搜尋,並返回指定值應插入的位置以保持排序順序。
它假定輸入陣列已排序。

示例:

import numpy as np

arr = np.array([1, 3, 5, 7, 9])

# 查詢值 7 應插入的索引
index = np.searchsorted(arr, 7)
print(index)  # 輸出: 3

# 從右側查詢值 2 應插入的索引
index = np.searchsorted(arr, 2, side='right')
print(index)  # 輸出: 1

練習

使用 np.where()np.searchsorted() 正確找到以下陣列 arr 中所有等於 3 的元素的索引。

import numpy as np

arr = np.array([1, 2, 3, 4, 3, 3, 6, 7, 8])

在評論中分享您的程式碼和輸出。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章