В вашем случае, когда items
и weights
равны Matrix
, вы можете использовать функцию eachrow
следующим образом:
map(randomSample, eachrow(items), eachrow(weights))
Если вы используете версию Julia ранее 1.1, вы можете написать:
map(i -> randomSample(items[i, :], weights[i, :]), axes(items, 1))
или
map(i -> randomSample(view(items,i, :), view(weights, i, :)), axes(items, 1))
(последний избегает выделения)
Однако на практике я, вероятно, определил бы items
и weights
как векторы векторов:
items = [[1, 0],[1, 0],[1, 0]]
weights = [[1, 0], [0.5, 0.5], [0.75, 0.25]]
и тогда вы можете просто написать:
map(randomSample, items, weights)
или
randomSample.(items, weights)
Причина моего предпочтения заключается в следующем:
- концептуально понятно, какова структура ваших данных
- вектор векторов легче мутировать (например, вы можете
push!
новую запись в конце)
- вектор векторов может быть разорван при необходимости
- в некоторых случаях это может быть немного быстрее (итерация по строкам в Julia не оптимальна, поскольку она использует индексацию по главному столбцу; конечно, вы можете исправить это в своем подходе
Matrix
, предполагая, что вы храните данные не по столбцам colwise, как вы в настоящее время)
(это не очень сильное предпочтение, и вы, вероятно, можете выбрать то, что вам удобнее)