首頁  >  文章  >  後端開發  >  如何使用另一個陣列的索引從 2D NumPy 陣列中提取元素?

如何使用另一個陣列的索引從 2D NumPy 陣列中提取元素?

Linda Hamilton
Linda Hamilton原創
2024-11-10 02:31:02649瀏覽

How to Extract Elements from a 2D NumPy Array Using Indices from Another Array?

使用另一個數組中的索引從二維數組中提取元素

在NumPy 中,有時需要從多維數組中提取特定元素基於儲存在另一個數組中的索引。在處理稀疏矩陣或索引選擇等資料結構時,經常會出現這種情況。

問題:

考慮兩個NumPy 數組:

A = np.array([[0, 1], [2, 3], [4, 5]])
B = np.array([[1], [0], [1]])  # Index array

目標是從A的每一行中提取一個元素,其中具體元素由對應行中的索引指定B.預期輸出應為:

C = np.array([[1], [2], [5]])

解:

1。純整數陣列索引:

A[np.arange(A.shape[0]), B.ravel()]

此方法涉及使用 NumPy 的整數陣列索引功能。它會產生與 A 的行相對應的一系列索引,並將其與展平的 B 數組組合以選擇適當的元素。

2.轉置和np.choose:

np.choose(B.ravel(), A.T)

在這個替代方法中,您轉置A 以匹配B 的形狀,然後使用np .choose 基於展平的B 陣列選擇所需的元素。

3。可迭代解包(Python >=3.6):

*A = A.T
C = np.array([*zip(*A)][i] for i in B.ravel())

此方法使用可迭代解包將A 轉換為行列表,然後根據B 中的索引迭代A 的行以得到提取所需的元素。

4.列表推導式和廣播:

[A[i][j] for i, j in zip(range(A.shape[0]), B.ravel())]

列表推導式可用於透過迭代A 和B 的元素並執行逐元素選擇來建立新數組。

5.花式索引 (NumPy >=1.18):

A[np.stack([range(A.shape[0]), B.ravel()], axis=1)]

花式索引允許更有效率、更緊密的索引操作。在這種情況下,它會建立一個具有行索引和 B 索引的 2D 數組,可用於從 A 中選擇所需的元素。

最合適的解決方案取決於任務的特定要求和約束,例如效率、可讀性以及與舊版本 NumPy 的兼容性。

以上是如何使用另一個陣列的索引從 2D NumPy 陣列中提取元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn