生成/得到指定范围内的随机数(数组)(基于[0,1)的随机数制作)得到[x,y](numpy/js)/得到不重复的指定范围内的随机数

网友投稿 339 2022-08-30


生成/得到指定范围内的随机数(数组)(基于[0,1)的随机数制作)得到[x,y](numpy/js)/得到不重复的指定范围内的随机数

文章目录

​​生成/得到指定范围内的随机数(数组)(基于[0,1)的随机数制作)/得到不重复的指定范围内的随机数/python随机数模块​​

​​特殊的​​​​一般的​​​​numpy为例​​​​result​​​​得到指定范围内的整数数组​​​​result​​

​​js做法​​

​​reference link​​​​得到不重复的指定范围内的随机数​​

​​python​​

​​python自带实现(sample)​​​​手工实现&可能的实现方式​​

​​python随机数模块​​

​​运行结果(某一次)​​

生成/得到指定范围内的随机数(数组)(基于[0,1)的随机数制作)/得到不重复的指定范围内的随机数/python随机数模块

特殊的

得到[0,right)内的随机数,我们可以: 通过类似​​​right*randomNumber​​的方式得到(randomNumber属于[0,1)

一般的

numpy为例

假设我们要得到[4,7)内的随机浮点数(不严谨的) (同时可以指定规格为shape=(14行,2列)

import numpy.random as nprbase_arr=npr.random(size=(14,2))ret=base_arr*3+4# base_arrprint(ret)

result

[[6.89122681 6.10158659] [6.33307061 4.92960413] [5.8762254 5.9819728 ] [4.03721165 4.23484648] [5.24072258 6.1540796 ] [5.25448255 5.23909412] [5.5258725 6.9564065 ] [5.30905859 4.98276731] [5.05256872 6.05561397] [4.6796204 6.18480935] [4.34248753 4.27403326] [5.03151893 6.72885987] [6.63896369 6.91770448] [5.35079495 6.57409296]]

得到指定范围内的整数数组

既然考虑使用numpy,就可以直接一步到位

import numpy.random as nprsize=(14,2)# size 规格range_int_arr=npr.randint(4,7+1,size)print(range_int_arr)

result

❯ py random_numpy.py[[5 7] [4 7] [5 7] [5 7] [5 7] [6 4] [4 7] [7 7] [7 4] [7 7] [4 7] [4 6] [6 5] [6 6]]

js做法

您可以这样写

Math.floor(Math.random() * (max - min + 1)) + min

这里用到向下取整

reference link

​​Math.random() - JavaScript | MDN (mozilla.org)​​​​示例 (mozilla.org)​​

得到不重复的指定范围内的随机数

python

如何生成指定范围内的不重复的一批随机数/乱序数

python自带实现(sample)

​​random — 生成伪随机数 — Python 3.10.4 文档​​

population=('a', 'b', 'c', 'd')rand_sample_immutable2 = random.sample( population,k=len(population))print("@rand_sample_immutable2:", rand_sample_immutable2)#@rand_sample_immutable2: ['d', 'c', 'a', 'b']

手工实现&可能的实现方式

打乱数组法在python中,可以用shuffle函数进行打乱,然后返回这个被打乱的数组(部分或者全部)返回随机抽取的对象手动生成指定范围内的序列,存储在容器中(例如列表/数组)打乱这个序列(执行shuffle操作/或者自行实现shuffle操作)再以这些随机(乱序)数作为key/index,到容器中取出对象例如:生成指定数目(譬如20个)值在20~100内的数(20个值不重复)

import random as randdef get_range_randoms(low=20, high=100, size=10, is_contain_high=0, is_sorted=1): ''' :param low: 随机数下界 :type low: :param high: 随机数上界 :type high: :param size: 需要取出多少个随机数 :type size: :param is_contain_high:默认开区间; 0表示开区间;1表示闭区间 :type is_contain_high: :param is_sorted: 默认排序;0表示排序;1表示排序; :type is_sorted: :return: :rtype: ''' if is_contain_high: high += 1 range_list = list(range(low, high)) # 如果需要闭区间,可以为upper_bound+1 rand.shuffle(range_list) shuffled_list = range_list sized_list = shuffled_list[:size] # print(randon_list) ## # 可选(排序这些随机数) if (is_sorted): sized_list.sort() # 查看结果 return sized_listres=get_range_randoms(55, 177, 10, is_contain_high=0,is_sorted=1)print(res)

python随机数模块

# from random import randomimport random# 获取闭区间内的随机数rand_int = random.randint(1, 10)print("@rand_int:", rand_int)rand_int = random.randrange(1, 10 + 1)print("@rand_int:", rand_int)# 获取0-2^k次幂内的整数(左闭右开)0...(111..1)rand_bits = random.getrandbits(2)print("@rand_bits:", rand_bits, type(rand_bits))# 从给定的序列(集合)中随机选中一个元素rand_choice = random.choice(['a', 'b', 'c', 'd'])print("@rand_choice:", rand_choice)# 从给定的序列中返回子集rand_choices = random.choices(population=['a', 'b', 'c', 'd'], k=3)print("@rand_choices:", rand_choices)# rand_shuffle = random.shuffle(['a', 'b', 'c', 'd'])# 不恰当当用法,返回None;被随机排序的对象会发生改变!seq_mutable= ['a', 'b', 'c', 'd']seq_mutable_bak=seq_mutable.copy()random.shuffle(seq_mutable)print("@rand_shuffle:", seq_mutable,'<-',seq_mutable_bak)rand_sample_immutable = random.sample(population=('a', 'b', 'c', 'd'), k=3)print("@rand_sample_immutable:", rand_sample_immutable,'<-',('a', 'b', 'c', 'd'))population=('a', 'b', 'c', 'd')seq_sample = random.sample(population, k=len(population))print("@rand_sample_immutable2:", seq_sample, '<-', population)

运行结果(某一次)

@rand_int: 3@rand_int: 9@rand_bits: 3 @rand_choice: d@rand_choices: ['a', 'a', 'c']@rand_shuffle: ['d', 'b', 'a', 'c'] <- ['a', 'b', 'c', 'd']@rand_sample_immutable: ['a', 'b', 'd'] <- ('a', 'b', 'c', 'd')@rand_sample_immutable2: ['c', 'd', 'b', 'a'] <- ('a', 'b', 'c', 'd')


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python_bytes(字节串)/string(字符串)/unicode码/utf-8编码/字面值/原始字符串/字符串编码&字节解码
下一篇:Mybatis中一条SQL使用两个foreach的问题及解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~