Python 3.x 如何构造一个numpy数组,使其每个元素都是所有可能值的最小值?
我想构造一个一维numpy数组a,我知道每个a[I]都有几个可能的值。当然,a的任意两个元素的可能值的数目可能不同。对于每个a[i],我想将其设置为所有可能值的最小值 例如,我有两个数组: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中是否存在可以完
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_统计中是半开的,因此此实现是安全的