【发布时间】:2020-03-09 06:36:30
【问题描述】:
给定一些项目,比如“a”、“b”、“c”。我想让一个对称矩阵看起来像这样:
a b c
a 1 2 3
b 2 4 5
c 3 5 6
矩阵中填充了从数字 1 开始的一系列数字。因为矩阵是对称的,所以对角线以上的值应该与对角线以下的值相同。另外,我还想在对角线上填数字。
更新:我已经完成了 Python 的工作,但我是 Python 的新手,我的代码可能相当多余。 我也希望收到用R写的答案。
import pandas as pd
import numpy as np
import itertools
var = ["a","b","c"]
mylist = list(itertools.combinations_with_replacement(var, 2))
df = pd.DataFrame(mylist,columns = ["col_1","col_2"])
df["num"] = list(range(1,len(df['col_1'])+1))
df2 = pd.DataFrame()
df2["col_1"] = df["col_2"]
df2["col_2"] = df["col_1"]
df2["num"] = df["num"]
mydf = df.append(df2)
mydf['label'] = mydf[['col_1', 'col_2']].apply(lambda x: '_'.join(x), axis=1)
mydf = mydf[["label","num"]]
mylist_2 = list(itertools.product(var, repeat=2))
df_2 = pd.DataFrame(mylist_2,columns = ["col_1","col_2"])
df_2["label"] = df_2[['col_1', 'col_2']].apply(lambda x: '_'.join(x), axis=1)
new_df = pd.merge(df_2[["label"]],mydf,on = "label",how = "inner").drop_duplicates()
new_list = list(new_df.num)
my_array = np.asarray(new_list).reshape(len(var),len(var))
matrix_df = pd.DataFrame(my_array,index=var,columns=var)
【问题讨论】:
-
判断
a和b之间关系的规则是什么? -
您还标记了 R 和 Python?到目前为止你有没有尝试过任何东西,你可以发布你的代码吗?
-
你想要一个对称矩阵给定什么?方阵?向量?
-
正如@kosnik 上面所说,矩阵的值是如何确定的?它是现有的内置函数还是您将编写的东西?是矢量化函数吗?