首頁 >後端開發 >Python教學 >NumPy 的`meshgrid`函數如何有效率地產生數組值的所有組合?

NumPy 的`meshgrid`函數如何有效率地產生數組值的所有組合?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-21 01:24:09262瀏覽

How Can NumPy's `meshgrid` Function Efficiently Generate All Combinations of Array Values?

利用 NumPy 進行高效能數組組合

為了研究六參數函數的數值行為,您需要尋找一種有效的方法來遍歷其參數空間。最初,您使用自訂函數來組合數組值,然後使用 reduce() 來重複套用它。雖然有效,但事實證明這種方法很麻煩。

NumPy 的高效解決方案

較新版本的 NumPy(1.8.x 及更高版本)提供了一個更優越的解決方案:numpy.meshgrid()。此函數可以建立包含輸入數組所有可能組合的多維數組。在您的情況下:

import numpy as np

a = np.arange(0, 1, 0.1)
combinations = np.array(np.meshgrid(a, a, a, a, a, a)).T.reshape(-1, 6)

此方法顯著提高了效能,如以下基準所示:

%timeit np.array(np.meshgrid(a, a, a, a, a, a)).T.reshape(-1, 6)

# Output: 10000 loops, best of 3: 74.1 µs per loop

或者,您可以使用以下自訂函數來實現最大程度的控制:

def cartesian(arrays):
    arr = np.empty((len(arrays.shape), len(arrays)))
    for n, array in enumerate(arrays):
        arr[n, :] = array
    return arr.T.reshape(-1, len(arrays))

%timeit cartesian([a, a, a, a, a, a])

# Output: 1000 loops, best of 3: 135 µs per loop

以上是NumPy 的`meshgrid`函數如何有效率地產生數組值的所有組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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