【问题标题】:Create binary matrix from matching values each row python从匹配值每行python创建二进制矩阵
【发布时间】:2018-10-26 03:57:40
【问题描述】:

我有以下问题。我想创建一个看起来像这样的二进制矩阵(对不起,我不得不用 Excel 来说明)

来自这个 1 列的 csv 文件:

基本上我希望 Python 读取列,比较每一行,如果 2 行具有相同的值,则矩阵上该对的坐标将取值 1,否则取值为 0。

所以,如果我有 10 行,我将有一个 10 x 10 矩阵,对角线全为 1,上三角形看起来与上三角形完全相同,由对角线分隔。

有没有办法在 Python 和 Pandas/Numpy 中做到这一点?

非常感谢!

【问题讨论】:

  • 请复制粘贴您的数据框,而不是图片

标签: python pandas numpy matrix


【解决方案1】:

最简单的方法就是将数组与它的二维转置进行比较,例如:

In []:
a = np.array(['a', 'b', 'a', 'c'])
(a[:,None] == a[None,:]).astype(int)

Out[]:
array([[1, 0, 1, 0],
       [0, 1, 0, 0],
       [1, 0, 1, 0],
       [0, 0, 0, 1]])

注意:a[None,:] 的形状是 (1, 4)a[:,None](相当于 a[None,:].T)是 (4, 1) 这样,当您比较它们时,您会将结果广播到方阵 (4, 4)

【讨论】:

  • 谢谢!但是我收到了这个错误:“ValueError:只能比较标记相同的 DataFrame 对象”。你知道为什么会这样吗?
  • 您必须出示您的 pandas 代码 - 以上是 numpy
  • 啊,我解决了。愚蠢的我,我忘了“.values”数据框。谢谢!
猜你喜欢
  • 2014-04-08
  • 2017-03-27
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2016-07-29
相关资源
最近更新 更多