我有一个大型数组列表。每个数组都包含数据。我还有另一个平均数组,其中每行包含每个数据数组的平均值。对于数据数组中的每一行,我想减去该行的平均值。我想要的一个较小的例子如下所示:
data = [array([[ 13.964, 13.983, 14.03 , 13.788, 13.771, 13.781],
[ 13.845, 13.854, 13.896, 13.688, 13.657, 13.675]]),
array([[ 14.182, 14.184, 14.223, 14.006, 13.991, 14.001],
[ 14.216, 14.231, 14.271, 14.042, 14.023, 14.035]]),
array([[ 15.717, 15.761, 15.812, 15.488, 15.444, 15.489],
[ 15.861, 15.943, 15.995, 15.64 , 15.613, 15.62 ]])]
avgs = array([[ 13.9045, 13.9185, 13.963 , 13.738 , 13.714 , 13.728 ],
[ 14.199 , 14.2075, 14.247 , 14.024 , 14.007 , 14.018 ],
[ 15.789 , 15.852 , 15.9035, 15.564 , 15.5285, 15.5545]])
我想要产生的是:(这是一个非常简单的例子,每个数组只有两行,但实际上我想从各种数据数组中的每一行中减去数组的平均值。)
subtracted_data = [array([[ 0.0595, 0.0645, 0.067 , 0.05 , 0.057 , 0.053 ],
[-0.0595, -0.0645, -0.067 , -0.05 , -0.057 , -0.053 ]]),
array([[-0.017 , -0.0235, -0.024 , -0.018 , -0.016 , -0.017 ],
[ 0.017 , 0.0235, 0.024 , 0.018 , 0.016 , 0.017 ]])
array([[-0.072 , -0.091 , -0.0915, -0.076 , -0.0845, -0.0655],
[ 0.072 , 0.091 , 0.0915, 0.076 , 0.0845, 0.0655]])]
我试着这样做:
subtracted_data = [[]]*len(data)
for i in range(len(data)):
for j in data[i]:
subtracted_data[i].append(data[i][j] - avgs[i])
没有成功。我想知道我是否正确接近这一点。
答案 0 :(得分:4)
更好的做法当然是没有数组列表,而是更高维数组。在你的情况下:
>>> data = np.array(data)
>>> data.shape
(3L, 2L, 6L)
>>> avgs.shape
(3L, 6L)
>>> data - avgs[:, None, :]
array([[[ 0.0595, 0.0645, 0.067 , 0.05 , 0.057 , 0.053 ],
[-0.0595, -0.0645, -0.067 , -0.05 , -0.057 , -0.053 ]],
[[-0.017 , -0.0235, -0.024 , -0.018 , -0.016 , -0.017 ],
[ 0.017 , 0.0235, 0.024 , 0.018 , 0.016 , 0.017 ]],
[[-0.072 , -0.091 , -0.0915, -0.076 , -0.0845, -0.0655],
[ 0.072 , 0.091 , 0.0915, 0.076 , 0.0845, 0.0655]]])
答案 1 :(得分:1)
下面:
>>> subtracted_data = np.empty_like(data)
>>> for i in range(len(data)):
... subtracted_data[i] = data[i] - avgs[i]
...
>>> subtracted_data
array([[[ 0.0595, 0.0645, 0.067 , 0.05 , 0.057 , 0.053 ],
[-0.0595, -0.0645, -0.067 , -0.05 , -0.057 , -0.053 ]],
[[-0.017 , -0.0235, -0.024 , -0.018 , -0.016 , -0.017 ],
[ 0.017 , 0.0235, 0.024 , 0.018 , 0.016 , 0.017 ]],
[[-0.072 , -0.091 , -0.0915, -0.076 , -0.0845, -0.0655],
[ 0.072 , 0.091 , 0.0915, 0.076 , 0.0845, 0.0655]]])
或者作为一个单行:
>>> subtracted_data = np.array([data[i] - avgs[i] for i in range(len(data))])
最后,如果您以后不需要中间平均值:
>>> subtracted_data = np.array([x - np.mean(x, 0) for x in data])