生成从均匀分布中提取的伪随机数

时间:2013-12-26 19:52:19

标签: clojure clojure-contrib

我正在寻找在Clojure中构建一个函数,它输出从开放区间(0,1)中提取的m×n矩阵的伪随机数。指定的输入将是行维度m和列维度n。我熟悉Clojure中构造的矩阵,嵌套向量,但之前从未生成过随机(伪)数。我的第一个猜测,如果从头开始,将使用模运算来抽出m x n矩阵的输入。这是实现这个想法的最简单方法吗?

2 个答案:

答案 0 :(得分:4)

内置(rand)从0到1之间的统一生成一个数字。所以:

(for [row (range m)]
  (for [column (range n)]
    (rand)))

无需实现自己的生成器。

答案 1 :(得分:2)

使用core.matrix,您可以使用emap功能执行此操作:

(emap (fn [_] (rand)) (new-array [5 4]))

默认情况下,它返回一个嵌套的Clojure向量矩阵,例如:

[[0.3325314113549507 0.7148578741930893 0.1786957191876699  0.46844096741466656]
 [0.8216388560276083 0.3733963694778344 0.7311554209845575  0.05163744870109632]
 [0.7838218008385947 0.8751976936581514 0.16056093051752107 0.5836745330219952]
 [0.6137578842075752 0.9735681676917135 0.30319026184660314 0.19757184630153146]   
 [0.6216442815557222 0.795080498020428  0.685714719411497   0.1567460494112074]]