我有两个列表,其中一个由x坐标组成,另一个由y坐标组成。
x_coordinates = [1, 2, 3, 4, 5]
y_coordinates = [1, 2, 3, 4, 5]
例如,point 1
为(1,1)
我想计算两个列表的协方差,并且我编写了一个代码,但我认为它有点不必要地长而且混乱。 我知道我可以使用math.cov来计算这个,但我想知道是否有可能对它进行整齐编程,可能使用map和lambda函数。
公式如下:
(x1 - average_x)*(y1 - average_y) + ... + (xn - average_x)*(yn - average_y) / (the number of the items in one of the lists)
代码:
import math
x_coordinates = [1, 2, 3, 4, 5]
y_coordinates = [1, 2, 3, 4, 5]
covariance_temp_sum = 0
x_mean = math.fsum(x_coordinates) / len(x_coordinates)
y_mean = math.fsum(y_coordinates) / len(y_coordinates)
for n in range(len(x_coordinates)):
covariance_temp_sum += (x_coordinates[n] - x_mean) * (y_coordinates[n] - y_mean)
covariance = covariance_temp_sum / len(x_coordinates)
答案 0 :(得分:4)
如果您不想使用外部模块,可以这样处理:
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
mean_x = sum(x) / len(x)
mean_y = sum(y) / len(y)
sum((a - mean_x) * (b - mean_y) for (a,b) in zip(x,y)) / len(x)
输出:2
答案 1 :(得分:1)
您可以使用理解,zip和多个变量赋值优雅地完成这些工作:
sum((x - x_mean)*(y - y_mean) for x, y in zip(x_coordinates, y_coordinates)) / len(x_coordinates)