找到共生矩阵的算法

时间:2011-11-10 05:20:03

标签: algorithm matrix

在我的理论数据分析课程中,我必须找到由学生一起学习的课程的共同出现矩阵。 我被要求手动完成,因为这不是编程课程。问题是,我的问题有20个课程和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
........
........

谢谢。

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用电子表格软件(例如oocalc)。每名学生一行,每门课一列;将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

通过标准输入给出数据时。