寻找共现矩阵的算法

标签 algorithm matrix

在我的理论数据分析类(class)中,我必须为学生一起学习的类(class)找到一个共现矩阵。 我被要求手动完成,因为这不是一门编程类(class)。问题是,我的问题有 20 门类(class)和 20 名学生!

是否有任何编程语言(如 Octave/Matlab 或 Python)具有执行此操作的 api 函数?

如果不是,我在哪里可以找到找到共现矩阵的算法。我可以将算法转换成代码。谷歌搜索并没有引导我找到算法。

我拥有的数据示例:

IT  421 540 531 582 
IT  549 561 528 578
IT  571 532 563 543

IT  421 561 571 519
IT  540 563 578 411
IT  411 421 581 578

IT  421 540 561 411
IT  541 548 528 546
IT  411 422 540 571
........
........

谢谢。

最佳答案

一个简单的方法是使用电子表格软件(例如 oocalc)。每个学生一行,每门类(class)一列;在适当的单元格中放置 1(或其他非空白标记),并使用求和(范围)函数计算每列中的标记数。

更新:在上述方法中,手动输入关联矩阵;我之前假设这是你想要创建的。但是,“共现矩阵”可能意味着其他含义。无论如何,使用 Python、Perl、Awk、Ruby 等语言编写的程序只需几行代码即可从所示形式的数据输出关联矩阵。例如,下面冗长的 Perl 程序可以修改为打印矩阵而不是表格:

  #!/usr/bin/perl
  for (<>) {             # Read all data lines
      ++$i;              # compute student #
      chomp $_;          # Remove newlines
      @s = split (/  */);
      foreach (@s) {     # Add student to each course
          $c{$_} .= " $i"
      }
  }
  foreach $course (sort keys %c) {
      print "Course $course : $c{$course}\n"
  }
  __END__ 

照原样,根据您提供的数据样本,它会产生如下输出:

  Course 411 :  6 7 9 11
  Course 421 :  1 5 7 9
  Course 422 :  11
  Course 519 :  5
  Course 528 :  2 10
  Course 531 :  1
  Course 532 :  3
  Course 540 :  1 6 9 11
  ...
  Course 582 :  1
  Course IT :  1 2 3 5 6 7 9 10 11

当通过标准输入提供数据时。

关于寻找共现矩阵的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075308/

相关文章:

image - 需要自动消除图像和物体外边界的噪声

c++ - 使用一维数组的矩阵乘法

c - 初始化结构的矩阵(双指针)成员

Opengl加载矩阵

algorithm - 使用 A-star 优化 N-Puzzle 上的重复节点搜索(封闭列表、开放列表)

java - 将二维数组中的所有元素向下移动

algorithm - (n 选择 k) 和长度为 n 的位串之间的双射,其中设置了 k 位

c++ - 多个内部分配 - 它是如何工作的?

python - 非常基本的 Numpy 数组维度可视化

r - 是否可以加快我创建相关矩阵的功能?