什么是避免连续随机值接近的好的,简洁的方法?例如,在perl中使用rand
,但确保任何连续值之间的最小0.2x差异/分布?我已经尝试了一些想法,比如重新采样rand,如果值很接近,但后来我需要一个脚本,我不知道如何在一个单行中干净利落地做到这一点。
上下文是我正在使用命令行和perl进行搜索替换。我们的想法是,在每一行中,字符串将替换为数组中的随机值。
echo ":z:z:z:" | tr ':' '\n' | perl -pe '@numbers=(1.2, 3.4, 5.6, 7.8); $number = $numbers[rand @numbers]; s/z/" : ".( $number )/ge'
输出是这样的:
: 3.4
: 5.6
: 5.6
: 1.2
了解5.6
如何重复?我想避免这种情况。在我的用例中,@numbers
数组包含~100个元素。我想调整rand @numbers
,以便所选的数组值更远。
答案 0 :(得分:1)
如果你确定输入行总是比数组元素少,你可以在开头shuffle
一次,然后为每一行删除一个元素:
$ echo -e 'foo\nbar\nbaz' | \
perl -MList::Util=shuffle -lpe'
BEGIN { @numbers = shuffle map { 1.2 * $_ } 1..4 }
$_ = pop @numbers
'
2.4
4.8
3.6