将协方差表转换为numpy中的协方差矩阵的最简单方法



假设您加载了一个相关表,如下所示:

pd.DataFrame([['A', 'B', 1], ['B', 'C', 2], ['A', 'C', 3], ['C', 'D', 100]])

1是A和B之间的协方差,2是B和C之间的协方差等。

将其转换为的最优雅(可读+高效(方式是什么

np.array([[1, 1, 3, 0], [1, 1, 2, 0], [3, 2, 1, 100], [0, 0, 100, 1]])

A、B、C和D的完整协方差矩阵,假设不成文的关系为0(在我的情况下为true(。变量可以是任何顺序。

首先,正如我在评论中提到的,拥有一个带strign和数字的ndarray将把所有内容都转换为字符串。因此,必须将第一个表中的相关值转换回浮点值。

假设你有第一张这样的表:

correlations = np.array([[0, 1, 1], [1, 2, 2], [0, 2, 3], [2, 3, 100])

其中'A'为0,'B'为1,依此类推…

你可以这样创建你需要的矩阵:

matrix = np.identity(var_counts)
for correlation in correlations:
i, j, value = correlation
i, j = int(i), int(j)
matrix[i, j] = matrix[j, i] = value

其中var_counts是第一个表中的变量数。