Numpy方法获取多个范围的numpy数组的最大值

mspsb9vt  于 2023-05-13  发布在  其他
关注(0)|答案(1)|浏览(157)

我想从一个numpy数组中获取多个范围内的最大值和最小值。我找到了this解决方案,当范围均匀时,只获得多个范围的最大值。然而,我的范围并不总是一致的。
因此,如果有一个数组的数字为1-9,范围是索引[0-2], [3-6], [7-8],我想从每个范围中获得最大值和最小值。
我在下面发布了一个可能的解决方案,但我想知道numpy是否有一个方法可以在没有循环的情况下做到这一点。

import numpy as np

a = np.array([1,2,3,4,5,6,7,8,9])
slices = [np.arange(0,3), np.arange(3,7), np.arange(7,9)]

max = np.empty(0)
min = np.empty(0)
for slice in slices:
    max = np.concatenate([max, np.max(a[slice])])
    min = np.concatenate([min, np.min(a[slice])])

min_and_max = np.concatenate([min,max])
pjngdqdw

pjngdqdw1#

ufunc.reduceat就是这样的:

>>> a = np.array([1,2,3,4,5,6,7,8,9])
>>> slices = np.array([0, 3, 7])
>>> np.maximum.reduceat(a, slices)
array([3, 7, 9])
>>> np.minimum.reduceat(a, slices)
array([1, 4, 8])
>>> np.vstack([np.minimum.reduceat(a, slices),
...            np.maximum.reduceat(a, slices)])
array([[1, 4, 8],
       [3, 7, 9]])

相关问题