在 J 中生成具有重复值的随机整数数组
Generate a random integer array with repeating values in J
我想生成一个具有重复值的随机数组。像这样:
4 11 6 3 5 4 16 11 26 5 4
我知道语句 12 ? 50
将生成一个随机整数数组,其中包含 12 个 唯一 值,范围为 0 到 49。我如何允许重复值?
J 也可以创建随机浮点数组吗?
NuVoc 在'Use These Combinations'下?'s documentation告诉你:
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 中得到一个随机数,独立于其他结果。
And can J create floating point arrays.
完全错过了这个问题。是的,您可以像处理任何其他类型的数组一样执行此操作。
datatype 1 2 3
integer
datatype 1.1 2.2 3.3
floating
Roll (?
) 是否会给出重复值取决于其参数的比率。如果可重复性要求是可选的,那么只需使用 Roll。如果是强制性的,那么首先使用 Roll 获取唯一值,然后分配该值以获得所需的长度。
J Vocabulary for Roll says如何获取随机浮点数:
? 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):
] s=. 3 + (26-3) * r
10.6182 23.8271 19.5039 17.6663 14.1991
或通过Polynomial (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 11 6 3 5 4 16 11 26 5 4
我知道语句 12 ? 50
将生成一个随机整数数组,其中包含 12 个 唯一 值,范围为 0 到 49。我如何允许重复值?
J 也可以创建随机浮点数组吗?
NuVoc 在'Use These Combinations'下?'s documentation告诉你:
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 中得到一个随机数,独立于其他结果。
And can J create floating point arrays.
完全错过了这个问题。是的,您可以像处理任何其他类型的数组一样执行此操作。
datatype 1 2 3
integer
datatype 1.1 2.2 3.3
floating
Roll (?
) 是否会给出重复值取决于其参数的比率。如果可重复性要求是可选的,那么只需使用 Roll。如果是强制性的,那么首先使用 Roll 获取唯一值,然后分配该值以获得所需的长度。
J Vocabulary for Roll says如何获取随机浮点数:
? 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):
] s=. 3 + (26-3) * r
10.6182 23.8271 19.5039 17.6663 14.1991
或通过Polynomial (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