gpt4 book ai didi

python - 同时有效地获取 numpy.argmin 和 numpy.amin

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:44 24 4
gpt4 key购买 nike

是否可以通过一次调用 numpy 获得 numpy.argmin 和 numpy.amin 的结果?谢谢。

最佳答案

您可以使用 np.argmin 获取对应于最小值的索引,然后将这些索引与 NumPy's advanced indexing 一起使用获得最小值。

让我们用一个2D数组来展示它的用法。设 A 是一个 2D 数组,假设我们有兴趣找到沿 axis=1 的最小索引和值。

因此,我们可以做-

min_idx = np.argmin(A,axis=1)
min_val = A[np.arange(A.shape[0]),min_idx]

让我们用实际的 2D 数组进行示例运行并验证结果 -

In [16]: A
Out[16]:
array([[79, 97, 12, 54, 59],
[44, 45, 42, 78, 32],
[32, 41, 67, 60, 4],
[24, 4, 85, 94, 65]])

In [17]: min_idx = np.argmin(A,axis=1)

In [18]: A[np.arange(A.shape[0]),min_idx] # Using min_idx & indexing
Out[18]: array([12, 32, 4, 4])

In [19]: np.amin(A,axis=1) # Using np.amin to verify
Out[19]: array([12, 32, 4, 4])

运行时测试-

In [26]: def original_app(A):
...: min_idx = np.argmin(A,axis=1)
...: min_val = np.amin(A,axis=1)
...: return min_idx, min_val
...:
...: def proposed_app(A):
...: min_idx = np.argmin(A,axis=1)
...: min_val = A[np.arange(A.shape[0]),min_idx]
...: return min_idx, min_val
...:

In [27]: A = np.random.randint(0,99,(4000,5000))

In [28]: %timeit original_app(A)
10 loops, best of 3: 70.9 ms per loop

In [29]: %timeit proposed_app(A)
10 loops, best of 3: 33.1 ms per loop

让我们进一步剖析时间安排 -

In [31]: min_idx = np.argmin(A,axis=1)

In [32]: %timeit np.argmin(A,axis=1) # Used in both methods
10 loops, best of 3: 34.5 ms per loop

In [33]: %timeit np.amin(A,axis=1) # Original approach
10 loops, best of 3: 37.3 ms per loop

In [34]: %timeit A[np.arange(A.shape[0]),min_idx] # Proposed approach
10000 loops, best of 3: 56 µs per loop

正如我们所看到的,在最后一步使用高级索引带来了重大 yield ,而且花费的运行时间可以忽略不计。这几乎可以减少 100% 的运行时间!

关于python - 同时有效地获取 numpy.argmin 和 numpy.amin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com