假设我有几个x-y-对阵列。我想创建一对新的数组,它们以下列方式组合数据:
新的x数组包含x数组中的所有x值(仅一次) 新的y数组包含y-数组中所有y值的总和,其中相应的x值相同。例如。
x1 = np.array([0, 1, 2, 3])
y1 = np.array([3, 2, 5, 7])
x2 = np.array([0, 2, 3, 4, 5])
y2 = np.array([4, 5, 4, 1, 6])
x3 = np.array([-2, -1, 0])
y3 = np.array([1, 0, 1])
a = np.array([x1, x2, x3])
b = np.array([y1, y2, y3])
x, y = array_combiner(a, b)
>>> x
array([-2, -1, 0, 1, 2, 3, 4, 5])
>>> y
array([ 1, 0, 8, 2, 10, 11, 1, 6]) #sum from previous arrays from corresponding x-values
有什么想法吗?
答案 0 :(得分:2)
我们可以使用np.unique
和np.bincount
,就像这样 -
# Collect all x-arrays and y-arrays into 1D arrays each
X = np.concatenate((x1,x2,x3))
Y = np.concatenate((y1,y2,y3))
# Get unique X elems & tag each X element based on its uniqueness among others
Xout,tag = np.unique(X,return_inverse=True)
# Use tags to perform tagged summation of Y elements
Yout = np.bincount(tag,Y)
示例输出 -
In [64]: Xout
Out[64]: array([-2, -1, 0, 1, 2, 3, 4, 5])
In [65]: Yout
Out[65]: array([ 1., 0., 8., 2., 10., 11., 1., 6.])