我有一个函数,叫做foo,它向输入中添加了一个随机数。这个过程进行了两次,并收集为一个列表,即
(defn foo [x] (vec (list (+ x (rand)) (+ x (rand)))))
在将和收集到索引结构a b之后,我想再次向每个元素添加一个随机数(更普遍地说,可以执行多个算术操作)。
(map #(+ % (rand)) [a b])
注意,元素a和b在这里是符号,在实际操作中是浮点数。
现在我到达了这篇文章的要点,我想重复上面的过程20次,并将迭代输出为20x2矩阵。这就是我被困在建筑里的地方。
此外,我希望从一开始就循环这个过程,以便将rand
添加到我的输入x中,从而给出两个新的索引元素a‘b’。请记住,a‘和b’是浮点数的符号表示,素数用于区分元素和第一个循环。然后将这些索引元素反馈到映射中,再执行20次。
最后一步,我希望函数中有一个输入参数,以便能够控制为映射阶段创建的索引元素的数量(完成20次)。
发布于 2014-03-15 19:36:25
我想重复上面的过程20次,并输出迭代。
那你就是在找iterate
。
我希望函数中有一个输入参数,以便能够控制创建的索引元素的数量。
那你就是在找repeat
。
(defn bar [init ncols nrows]
(take
nrows
(iterate
(partial map + (repeatedly rand))
(repeat ncols init))))
(->> (bar 0 2 20) (mapv vec))
=>; [[0 0]
; [0.1600773061377655 0.25622198504430205]
; .
; . (20 rows in all)
; .
;[3.0414688166175456 4.86821771584174]]
发布于 2014-03-15 19:44:30
我建议在这种数组/矩阵处理中使用core.matrix
。这可能比从头开始手工编写所有数组操作例程容易得多。请参阅:https://github.com/mikera/core.matrix
有许多core.matrix函数可以用来实现您的需求:
emap
-将函数应用于多维数组的每个元素。slices
-获取数组的切片序列https://stackoverflow.com/questions/22431201
复制相似问题