如何重复调用含随机数生成的Julia函数并将结果存入数组?
问题
我有一个包含随机数生成操作的Julia函数:
function foo() return sum(rand([1,0], 5)) end
我希望多次调用这个函数并把结果存入数组,已经知道可以用数组推导式实现:
[foo() for i in 1:10]
但我想找类似repeat()的方法(repeat()用于用相同值填充数组,示例如下),该怎么实现?
julia> repeat([4],3,4) 3×4 Matrix{Int64}: 4 4 4 4 4 4 4 4 4 4 4 4
解决方案
repeat()确实只能复制已有值,无法每次调用函数生成新内容,但可以用以下几种方式实现需求:
- 使用
fill!配合预分配数组fill!支持传入函数作为参数,会对数组的每个位置调用一次函数来填充,完美匹配你的需求:
# 先预分配指定长度的数组 result = Vector{Int}(undef, 10) # 用foo函数的返回值填充数组 fill!(result, foo)
也可以写成一行:
fill!(Vector{Int}(undef, 10), foo)
- 使用
map函数
通过map遍历一个无关的迭代器,每次调用foo()生成结果:
map(_ -> foo(), 1:10)
- 结合
Iterators.repeated与collect
这种方式稍显繁琐,但同样可行:
collect(map(_ -> foo(), Iterators.repeated(nothing, 10)))
其中第一种方法(fill!)在性能上更优,因为它是原地修改预分配的数组,避免了额外的内存分配开销。
内容的提问来源于stack exchange,提问作者Georgery
相关产品推荐
相关产品推荐

