【问题标题】:Transforming a mapping matrix变换映射矩阵
【发布时间】:2014-08-06 14:27:52
【问题描述】:

我有一个由 1 和 0 组成的二维数组,称为 M,其中 g 行代表组,a 列代表文章。 M 映射组和文章。如果给定的文章“art”属于组“gr”,那么我们有 M[gr,art]=1;如果不是,我们有 M[gr,art]=0。

现在,我想将 M 转换为 1 和 0 的方轴矩阵(称为 N),如果文章“art1”与文章“art2”在同一组中,我们有 N(art1,art2 )=1 并且 N(art1,art2)=0 否则。 N 显然与对角线上的 1 对称。

如何根据 M 构造 N?

非常感谢您的建议 - 如果这是微不足道的,我们深表歉意(对 python 来说还是新手...)!

【问题讨论】:

  • 用实际代码展示一个具体的例子总是一个好主意,这样更容易复制粘贴
  • 感谢杰夫的建议

标签: python-2.7 numpy pandas


【解决方案1】:

所以你有一个布尔矩阵M,如下所示:

>>> M
array([[1, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 1],
       [0, 0, 1, 0, 0, 0],
       [1, 0, 1, 0, 0, 0]])
>>> ngroups, narticles = M.shape

你想要的是一个形状为(narticles, narticles) 的矩阵,它代表co-occurrence。这就是矩阵的平方:

>>> np.dot(M, M.T)
array([[1, 0, 0, 1],
       [0, 2, 0, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 2]])

...除了你不想要计数,所以设置条目 > 0 到 1。

>>> N = np.dot(M, M.T)
>>> N[N > 0] = 1
>>> N
array([[1, 0, 0, 1],
       [0, 1, 0, 0],
       [0, 0, 1, 1],
       [1, 0, 1, 1]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2019-03-03
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多