假设您加载了一个相关表,如下所示:
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
是第一个表中的变量数。