相关系数矩阵转换成稀疏矩阵
如果你有一个相关系数矩阵,想要将其转化为一个包含三列(节点1、节点2、相关系数)的DataFrame,你可以使用Python的pandas库来实现。下面是一种可能的方法:
假设你有一个相关系数矩阵correlation_matrix,其中行和列的标签是节点的名称,矩阵中的值是相关系数。你可以按照以下步骤操作:
def get_graph(correlation_matrix):
df = pd.DataFrame(columns=['node_0', 'node_1', 'weight'])
# 使用两个嵌套循环遍历相关系数矩阵,提取相关系数和节点对
for i in range(len(correlation_matrix.columns)):
for j in range(i + 1, len(correlation_matrix.columns)):
node1 = correlation_matrix.columns[i]
node2 = correlation_matrix.columns[j]
correlation = correlation_matrix.iloc[i, j]
# 将节点对和相关系数添加到DataFrame中
df = df.append({'node_0': node1, 'node_1': node2, 'weight': correlation}, ignore_index=True)
return df
graph_df = get_graph(corr_df)
print(graph_df)
这段代码将遍历相关系数矩阵的每对节点,提取节点名称和相关系数,并将它们添加到一个新的DataFrame中。最终,你将得到一个包含了三列数据的DataFrame,其中每一行都代表了两个节点之间的相关系数。
要查找相关系数DataFrame中大于0的元素的下标,你可以使用numpy
库的np.where
函数来实现。以下是一个示例代码:
import numpy as np
# 假设你的相关系数DataFrame叫做df,假设相关系数在 'Correlation' 列中
# 创建一个布尔掩码,标记大于0的相关系数
mask = df['Correlation'] > 0
# 使用 np.where 获取满足条件的元素的行和列索引
rows, cols = np.where(mask)
# 打印满足条件的元素的行和列索引
for row, col in zip(rows, cols):
print(f'行索引:{row}, 列索引:{col}')
这段代码首先创建了一个布尔掩码 mask
,它标记了相关系数大于0的位置。然后,使用 np.where
函数来获取满足条件的元素的行和列索引,最后循环遍历并打印这些索引。
请注意,上述代码假设你的DataFrame中相关系数存储在 ‘Correlation’ 列中。如果你的列名称不同,需要相应地替换列名称。