首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于将双模式矩阵数据转换为单模式的Python代码

用于将双模式矩阵数据转换为单模式的Python代码
EN

Stack Overflow用户
提问于 2014-09-08 21:34:19
回答 1查看 629关注 0票数 0

作为Python的新手,我想知道是否有任何方法可以使用Python代码将两种模式的矩阵数据转换为一种模式。

这是为社交网络分析创建数据,我正在寻找一种方法来使用Pandas和Python来创建这样的脚本。

如果我有像这样的两种模式数据,

代码语言:javascript
复制
     workshop1     workshop2     workshop3    workshop4

A 1 0 1 1

B 0 1 1 0

C 1 1 1 0

%d 0 0 0 1

我需要把它转换成像这样的模式矩阵。

代码语言:javascript
复制
           A        B        C          D

A 4 1 2 1

B 1 4 2 0

C 2 2 4 0

D 1 0 0 4

A、B、C、D是注册参加工作坊的人员姓名,"1“表示注册参加工作坊的具体人员。

单模矩阵数据表明他们应该在研讨会上见面的次数。例如,A和C预计将在研讨会1和workshop3相遇两次。

感谢您的任何建议或帮助提前!

EN

回答 1

Stack Overflow用户

发布于 2014-09-08 22:38:46

NumPy解决方案:

根据this tutorial的说法,你可以简单地将矩阵与它的转置相乘。使用NumPy函数dot()transpose() (或简称T),您将得到以下代码:

代码语言:javascript
复制
import numpy as np

M = np.array([
    [1,0,1,1],
    [0,1,1,0],
    [1,1,1,0],
    [0,0,0,1]])

print M.dot(M.T)

输出:

代码语言:javascript
复制
[[3 1 2 1]
 [1 2 2 0]
 [2 2 3 0]
 [1 0 0 1]]

只是对角线不是你要求的4。相反,它们包含了一个人参加的研讨会的数量。你可以很容易地用np.fill_diagonal(A, 4)来解决这个问题,A是单模矩阵。

No-NumPy解决方案:

如果您不想使用NumPy,您可以将standard matrix multiplication调整为"R =M*M^T“的特殊情况:

代码语言:javascript
复制
m = len(M)
n = len(M[0])
R = [[0 for i in range(m)] for j in range(m)]
for i in range(m):
    for j in range(m):
        for k in range(n):
            R[i][j] += M[i][k] * M[j][k]

或具有3个索引ijk的对应一行程序

代码语言:javascript
复制
R = [[sum(M[i][k] * M[j][k] for k in range(len(M[0]))) for i in range(len(M))] for j in range(len(M))]

或者直接迭代M的行

代码语言:javascript
复制
R = [[sum(a * b for a, b in zip(A, B)) for B in M] for A in M]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25725535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档