一种方法是使用最小二乘法的特性,尽管它可能看起来有点神秘。
import numpy as np
a = np.array([[3, 1], [0, 2], [0, 3], [2, 3], [4, 3], [0, 4], [2, 4]])
uniq = np.unique(a[:, 1][None, :])
y = a[:, 0]
x = a[:, 1][:, None] == uniq
output = np.vstack((np.linalg.lstsq(x, y, rcond=None)[0], uniq)).T
print(output)
# [[3. 1.]
# [0. 2.]
# [2. 3.]
# [1. 4.]]
另一种选择是不使用
numpy
itertools.groupby
。这假设同一组由
from itertools import groupby
from operator import itemgetter
def mean(xs):
return sum(xs) / len(xs)
output = [[mean([x[0] for x in g]), k] for k, g in groupby(a, key=itemgetter(1))]
print(output) # [[3.0, 1], [0.0, 2], [2.0, 3], [1.0, 4]]
顺便说一句,请注意
Ii01
是单身汉
数组的。在上述代码中,我假设您只处理一个数组,即。,
a = Ii01[0]
.