У меня есть функция, которая возвращает массив. Я хотел бы отобразить функцию на вектор входных данных, а выходные данные - простую конкатенацию всех массивов. Функция:
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]
NB, длина Вложенные массивы не ограничены - я ищу решение, которое не зависит от знания длины вложенных массивов заранее.
То, что я хочу, выглядит примерно так:
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
Который я сделал, используя для l oop:
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
Код работает нормально, но для l oop требуется примерно в четыре раза больше времени. Я также чувствую, что map - это верный способ сделать это, и я просто что-то упускаю - либо при выполнении map таким образом, чтобы он возвращал хороший вектор массивов, либо в некоторой мутации массива, которая будет «отменена». Я пробовал просматривать такие функции, как сгладить и собрать, но ничего не могу найти.
Большое спасибо заранее!