我有一个函数,称之为foo,它为输入添加一个随机数。这个过程进行两次并作为列表收集,即
(defn foo [x] (vec (list (+ x (rand)) (+ x (rand)))))
将总和收集到索引结构[a b]后,我想再次为每个元素添加一个随机数(更常见的是能够进行多次算术运算)。
(map #(+ % (rand)) [a b])
请注意,元素a和b在此处是符号,并且在实际操作中将是浮点。
现在我到达这篇文章的主要观点并且我想重复上述过程20次,并将迭代输出为20x2矩阵。这是我被困在建筑中的地方。
此外,我想从头开始循环这个过程,以便rand
再次添加到我的输入x,给出两个新的索引元素[a'b']。请记住,'和b'是浮点的符号表示,素数用于区分元素和第一个循环。然后将这些索引元素反馈到映射中并再完成20次。
这个最后一步我想在函数中作为输入参数,这样我就可以控制为映射阶段创建的索引元素的数量(完成20次)。
答案 0 :(得分:2)
我想重复上述过程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]]
答案 1 :(得分:1)
我建议使用core.matrix
进行此类数组/矩阵处理。这可能比从头开始手动编写所有数组操作例程容易得多。请参阅:https://github.com/mikera/core.matrix
您可以使用许多core.matrix函数来实现您的要求:
emap
- 将函数应用于多维数组的每个元素slices
- 获取一系列数组切片