【发布时间】:2020-04-06 14:33:39
【问题描述】:
我有一个返回数组的函数。我想将函数映射到输入向量,输出是所有数组的简单串联。功能是:
function log_it(r, bzero = 0.25, N = 400)
main = rand(Float16, (N+150));
main[1] = bzero;
for i in 2:N+150
main[i] = *(r, main[i-1], (1-main[i-1]))
end;
y = unique(main[(N+1):(N+150)]);
r_vec = repeat([r], size(y)[1]);
hcat(r_vec, y)
end;
我可以很好地映射它:
map(log_it, 2.4:0.001:2.405)
但结果很糟糕:
[2.4 0.58349609375]
[2.401 0.58349609375]
[2.402 0.583984375; 2.402 0.58349609375]
[2.403 0.583984375]
[2.404 0.583984375]
[2.405 0.58447265625; 2.405 0.583984375]
注意,嵌套数组的长度是无限的 - 我正在寻找一种不依赖于预先知道嵌套数组长度的解决方案。
我想要的是这样的:
2.4 0.583496
2.401 0.583496
2.402 0.583984
2.402 0.583496
2.403 0.583984
2.404 0.583984
2.405 0.584473
2.405 0.583984
我使用 for 循环制作的:
results = Array{Float64, 2}(undef, 0, 2)
for i in 2.4:0.001:2.405
results = cat(results, log_it(i), dims = 1)
end
results
代码运行良好,但 for 循环的时间大约是原来的四倍。我也觉得 map 是正确的方法,我只是错过了一些东西——要么以返回一个不错的数组向量的方式执行 map,要么在数组的某些突变中“不嵌套”。我尝试过查看 flatten 和 collect 之类的功能,但找不到任何东西。
非常感谢!
【问题讨论】:
标签: julia