如何解决Python代码中np.random.randint引发的ValueError: low >= high错误?
解决np.random.randint的"low >= high"错误
错误原因
当num_1被生成为1时,进入if num_1 < num_2分支后,执行np.random.randint(1, num_1)等价于传入参数(1,1)。而numpy的randint函数要求左边界low必须小于右边界high,此时两者相等就会触发"low >= high"错误。
解决方案
方案1:调整num_1的生成范围
让num_1从2开始生成,确保进入分支时1 < num_1,randint的参数合法:
import numpy as np while True: max_num = 1000 num_1 = np.random.randint(2, max_num) num_2 = np.random.randint(1, max_num) if num_1 < num_2: num_2 = np.random.randint(1, num_1) break
方案2:直接生成符合条件的num_2
跳过分支判断,直接生成小于等于num_1的num_2(如果需要严格小于,就确保num_1至少为2):
import numpy as np max_num = 1000 num_1 = np.random.randint(1, max_num) # 生成1到num_1之间的数(包含num_1) num_2 = np.random.randint(1, num_1 + 1)
如果要求num_2严格小于num_1:
import numpy as np max_num = 1000 num_1 = np.random.randint(2, max_num) num_2 = np.random.randint(1, num_1)
方案3:添加边界判断避免非法参数
在分支里检查num_1的值,当num_1为1时重新生成数据,不执行非法的randint调用:
import numpy as np while True: max_num = 1000 num_1 = np.random.randint(1, max_num) num_2 = np.random.randint(1, max_num) if num_1 < num_2: if num_1 > 1: num_2 = np.random.randint(1, num_1) else: # num_1为1时重新循环生成 continue break
内容的提问来源于stack exchange,提问作者Emir
相关产品推荐
相关产品推荐

