Python 3.x 如何构造一个numpy数组,使其每个元素都是所有可能值的最小值?

Python 3.x 如何构造一个numpy数组,使其每个元素都是所有可能值的最小值?,python-3.x,numpy,Python 3.x,Numpy,我想构造一个一维numpy数组a,我知道每个a[I]都有几个可能的值。当然,a的任意两个元素的可能值的数目可能不同。对于每个a[i],我想将其设置为所有可能值的最小值 例如,我有两个数组: idx = np.array([0, 1, 0, 2, 3, 3, 3]) val = np.array([0.1, 0.5, 0.2, 0.6, 0.2, 0.1, 0.3]) 我要构造的数组如下所示: a = np.array([0.1, 0.5, 0.6, 0.1]) 那么numpy中是否存在可以完

我想构造一个一维numpy数组a,我知道每个a[I]都有几个可能的值。当然,a的任意两个元素的可能值的数目可能不同。对于每个a[i],我想将其设置为所有可能值的最小值

例如,我有两个数组:

idx = np.array([0, 1, 0, 2, 3, 3, 3])
val = np.array([0.1, 0.5, 0.2, 0.6, 0.2, 0.1, 0.3])
我要构造的数组如下所示:

a = np.array([0.1, 0.5, 0.6, 0.1])
那么numpy中是否存在可以完成这项工作的函数呢?

这里有一种方法-

def groupby_minimum(idx, val):
    sidx = idx.argsort()
    sorted_idx = idx[sidx]
    cut_idx = np.r_[0,np.flatnonzero(sorted_idx[1:] != sorted_idx[:-1])+1]
    return np.minimum.reduceat(val[sidx], cut_idx)
样本运行-

In [36]: idx = np.array([0, 1, 0, 2, 3, 3, 3])
    ...: val = np.array([0.1, 0.5, 0.2, 0.6, 0.2, 0.1, 0.3])
    ...: 

In [37]: groupby_minimum(idx, val)
Out[37]: array([ 0.1,  0.5,  0.6,  0.1])
In [66]: pandas_groupby_minimum(idx, val)
Out[66]: array([ 0.1,  0.5,  0.6,  0.1])
这是另一个使用熊猫的例子-

样本运行-

In [36]: idx = np.array([0, 1, 0, 2, 3, 3, 3])
    ...: val = np.array([0.1, 0.5, 0.2, 0.6, 0.2, 0.1, 0.3])
    ...: 

In [37]: groupby_minimum(idx, val)
Out[37]: array([ 0.1,  0.5,  0.6,  0.1])
In [66]: pandas_groupby_minimum(idx, val)
Out[66]: array([ 0.1,  0.5,  0.6,  0.1])
您还可以使用binned_统计:

我认为,在较旧的scipy版本中,没有实现statistic='min',但可以使用statistic=np.min。区间在binned_统计中是半开的,因此此实现是安全的