Будет ли Roll (?
) давать повторяющиеся значения, зависит от соотношения его аргументов. Если требование повторяемости не является обязательным, просто используйте Roll. Если это обязательно, то сначала используйте Roll для получения уникальных значений, а затем выдайте эти значения, чтобы получить необходимую длину.
J Словарь для Roll говорит , как получить случайную плавающую точку число:
? 0 NB. as a scalar
0.331228
] r=. 5 ?@$ 0 NB. as an array of shape x (which is 5 here)
0.331228 0.905526 0.71756 0.637666 0.486918
Затем его можно масштабировать до желаемого диапазона, скажем, открытого интервала (3,26), с помощью арифметических c операторов:
] s=. 3 + (26-3) * r
10.6182 23.8271 19.5039 17.6663 14.1991
или с помощью Полином (p.
):
] s=. (3 , 26-3) p. r
10.6182 23.8271 19.5039 17.6663 14.1991
А затем его можно распределить до конечной длины (скажем, 8):
(8 ?@$ 5) { s
10.6182 14.1991 17.6663 10.6182 17.6663 17.6663 23.8271 19.5039