Как установить случайные числа, попадающие в диапазон в kdb +? - PullRequest
0 голосов
/ 24 февраля 2019

В Kdb +, как я могу использовать функцию "roll", чтобы генерируемые случайные числа попадали в диапазон, который не начинается с 0?Например, что, если бы я хотел, чтобы диапазон был в пределах 2-10 вместо 0-10?

Что мне нужно добавить в код, чтобы он попал в диапазон вместо значения по умолчанию 0-x?Я пробовал и искал каждый метод, но, похоже, не могу его найти.

Ответы [ 4 ]

0 голосов
/ 24 февраля 2019

Вы также можете просто бросить 0-8, а затем добавить два.Для этого не требуется предварительно создавать список

q)2+5?9
10 2 7 10 7

Если вы хотите, чтобы 2-10 включительно

0 голосов
/ 24 февраля 2019

Если вы предоставите список в правом аргументе, вы получите случайное значение из этого списка.Чтобы получить случайный диапазон от 2 до 10, вы можете использовать til для создания диапазона:

q)2+til 9
2 3 4 5 6 7 8 9 10
q)1?2+til 9
,6

Вы можете даже предоставить общий список для случайного выбора из:

q)3?(`abc;2 3f;10;20;30;"text")
2 3f
`abc
"text"
0 голосов
/ 24 февраля 2019

Простая математическая функция для генератора случайных чисел:

(rand () mod (1 + max-min)) + min

q) f:{x+rand[0] mod  1+y-x}
q) f[5;10]
q) 7

Обновление: Я не заметил, что вы хотите сгенерировать пару случайных чисел в диапазоне.Вы можете легко изменить вышеуказанную функцию для этого:

q) f:{x+(z?0) mod  1+y-x}
q) f[2;10;4]
q) 6 4 7 2 
0 голосов
/ 24 февраля 2019
// quick and simple method
q)10?2+til 8
6 2 4 3 4 3 4 5 4 7
// or function (x)=num to be dealt, (y) start range, (z) end range
q)f:{x?y+til 1+z-y}
q)f[10;10;20]
12 17 10 11 19 12 11 18 18 11
...