Я пытаюсь создать фрейм данных в Julia с двумя столбцами, x и y, представляющими декартово произведение значений x и значений y. Я думаю, что вкратце это можно описать как использование вывода итератора, двумерного массива кортежей, в качестве аргумента для DataFrame.
Вот код для получения массива кортежей продукта (Julia 1.4.2):
x = [0:0.1:2;]
y = [0:1.5:30;]
product = collect(Iterators.product(x, y))
Я хочу что-то вроде этого:
x y
Float64 Float64
1 0.0 0.0
2 0.1 1.5
3 0.2 3.0
4 0.3 4.5
5 0.4 6.0
6 0.5 7.5
Большое спасибо за внимание.
Декартово произведение — это набор упорядоченных кортежей, поэтому фактически
Iterators.product
в этом случае возвращает матричный итератор по кортежам, т.е. вызовcollect
наIterators.product(x,y)
вернетMatrix{Tuple{Float64,Float64}}
Но конструктор DataFrame может съесть итератор в качестве аргумента и вернуть желаемый результат.
Обратите внимание, что вы не можете указать имена df в конструкторе, например
DataFrame(product, [:x, :y])
, потому что такого метода нетБольшое спасибо за ваше решение. Особенно понравился итератор eat. — person zazizoma; 08.07.2020
На самом деле это даже проще. Просто пиши:
Еще один хороший шаблон для двух столбцов:
Если вы используете
Iterators.product
, не материализуя его сначала, это будет немного быстрее, а материализацияIterators.product
будет самой быстрой (но использует немного больше памяти):Вы можете использовать
Range
s прямо в конструктореDataFrame
:Спасибо, но это не дает мне всех комбинаций x и y, и я ожидаю 441 строку, а не 21. — person zazizoma; 07.07.2020
Извините, я просмотрел ваш пример вывода, где значения были сопоставлены в соответствующих парах, и я подумал, что это то, что вы хотите — в этом случае используйте ответ Богумила, здесь нечего добавлять. — person zazizoma; 07.07.2020