[英]How can I generate in Python a matrix with n random elements between 1 and 30 and the rest of the elements equal to zeros?
[英]Generate a matrix of dependencies between elements
我必须在数据框的元素之间构建一个依赖关系矩阵。 列's'中的每个元素都有一个不同节点的列表(从1到70)和相应的时间(列't')。 任务是找到所有节点之间的所有依赖关系,并将时间值的总和放入表中。
例如:节点sa1与以下节点有连接:sa2,sa3(0行),sa3(1行),sa5,sa9(3行)
对于节点sa2,sa5,sa9,可以直接使用列't'中的值,因为它们只出现一次。 节点3有两行,因此我们添加't'值。
我试图用许多for循环解决它,我有时间问题,处理大约50分钟的数据,所以需要一些提示如何准备数据进行分析。
正如我刚刚注意到的那样,有必要仅计算主对角线上方的元素,主对角线为NaN,主对角线下方的元素仅为镜像。
这就是我输入的示例
s t
0 sa1,sa2,sa3 10
1 sa1,sa3 20
2 sa1,sa5,sa9 123
这是生成上述表格的代码
sas = pd.Series(['sa1,sa2,sa3', 'sa1,sa3', 'sa1,sa5,sa9'], name='s')
times = pd.Series([10, 20, 123], name='t')
df = pd.concat([sas, times], axis=1)
我希望得到下表
sa1 sa2 sa3 sa4 sa5 ... sa9
sa1 - 10 30 123 123
sa2 10 -
sa3 30 -
sa4 -
sa5 123 -
... -
sa9 123 -
使用dot
轻松实现
s=df.s.str.get_dummies(',')
s=s.mul(df.t,0).T.dot(s)
s.values[[np.arange(s.shape[0])]*2] = 0
s
Out[104]:
sa1 sa2 sa3 sa5 sa9
sa1 0 10 30 123 123
sa2 10 0 10 0 0
sa3 30 10 0 0 0
sa5 123 0 0 0 123
sa9 123 0 0 123 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.