需要帮助创建一个方形矩阵,其中列/行的数量由用户定义

时间:2013-07-29 21:21:23

标签: ruby matrix

首先,我是一个红宝石新手,所以我要求你耐心等待我。 :) 其次,在你阅读请求并认为我想要得到简单的答案之前,请相信我,我已经花了最近7天在线搜索它们,但是没有找到任何回答我非常具体的问题。第三,对于长篇描述感到遗憾,但我需要的帮助是指向正确的方向。

我有一个关于遗传漂移的小班项目的想法。在群体遗传学中,概率矩阵用于给出在生成t1到生成t2中等位基因的频率将从i变为j的概率。

所以,假设我从t1中的等位基因B的一个副本开始,并想知道它在t2中进入三个副本的概率。这个值(由二项分布给出,我已经编写了一个很好的小代码)然后将进入对应于第1列第3行的单元格(这可能会更好地澄清事情:https://docs.google.com/viewer?url=http%3A%2F%2Fsamples.jbpub.com%2F9780763757373%2F57373_CH04_FINAL.pdf )。

我不知道该怎么办,想获得的信息是:

  • 如何制作一个方形矩阵,其中行/列的数量由用户决定(比如有人想获得4个人口的概率矩阵,其中有8个等位基因拷贝,但是其他人想要获得100个人口的概率矩阵,其中有200个等位基因拷贝?)

  • 如何将二项分布方程应用于每个不同列/行组合的值(即在对应于第1列第3行的单元格中,该值将由二项式方程确定变量1和3;以及在对应于第4行第7行的单元格中,该值将由具有变量4和7的二项式方程确定。变量的不同组合的数量(如1和1,1和2,1和3等)由用户设置的列数/行数确定。

我不是要求任何人给我代码或为我做我的工作,我要求你,经验丰富的程序员,指出我正确答案的方向,因为我非常悲惨未能找到这个方向。我应该查看数组而不是矩阵吗?我应该研究具体的迭代器吗?哪一个?有没有人有更多我可以研究的具体材料,或者可以根据创建矩阵的经验给我提示?我真的想学习ruby,并学习如何做到这一点,而不仅仅是完成它。

1 个答案:

答案 0 :(得分:0)

为了生成矩阵,您可能希望查看Matrix类:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/matrix/rdoc/Matrix.html,其方法Matrix.build(row_size, column_size)看起来非常适合您的问题。它甚至需要一个块来生成值:

require 'matrix'

Matrix.build( 5, 5 ) do |row, col| 
  binomial_function( row, col )
end

显然你也需要编写二项式函数 - 看起来你可能已经这样做了吗?

如何使行/列成为用户选择,取决于您希望最终用户运行代码的方式。您可能应该在另一个问题中明确说明,网站和命令行脚本之间的方法存在一些差异。