Создать случайный массив целых чисел с повторяющимися значениями в J - PullRequest
1 голос
/ 16 февраля 2020

Я хочу создать случайный массив с повторяющимися значениями (что-то вроде этого: 4 11 6 3 5 4 16 11 26 5 4) Я знаю, что утверждение 12? 50 сгенерирует случайный массив целых чисел с 12 уникальными значениями в диапазоне от 0 до 49. И может ли J создавать массивы с плавающей запятой.

Ответы [ 2 ]

4 голосов
/ 17 февраля 2020

Будет ли 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
4 голосов
/ 16 февраля 2020

NuVo c сообщает вам в документации ? в разделе «Использовать эти комбинации»:

   5 ?@$ 10
3 3 7 7 0
   5 ?@$ 10
6 7 6 6 9

Это имеет тот же эффект, но более производительный, чем

   ? 5 $ 10
6 1 1 8 9
   ? 5 $ 10
5 9 7 2 9

Что, конечно, строит массив из пяти 10 и затем применяется? каждому из них получить случайное число от 0,9, независимо от других результатов.

И может ли J создавать массивы с плавающей запятой.

Полностью пропустил это вопрос. Да, вы сделали бы это так же, как и с любым другим видом массива.

   datatype 1 2 3
integer
   datatype 1.1 2.2 3.3
floating
...