在下面的代码中,我想在start_seed
和end_seed
指定的范围内选择随机整数。但显示有错误。我该如何解决这个问题?
from scipy.stats import truncnorm
import numpy as np
import os
import csv
Runs = 5
Nodes = 1012
start_seed = 1
end_seed = 1e100
desired_mean = 50.0
desired_variance = 5.0
def function(run):
parent_folder = str(run + 1)
os.mkdir(parent_folder)
seed = np.random.randint(start_seed, end_seed + 1)
np.random.seed(seed)
# Generate truncated normal random numbers with specified mean and variance
lower_bound = desired_mean - 2 * np.sqrt(desired_variance)
upper_bound = desired_mean + 2 * np.sqrt(desired_variance)
r = (1e-6) * truncnorm.rvs((lower_bound - desired_mean) / np.sqrt(desired_variance), (upper_bound - desired_mean) / np.sqrt(desired_variance), loc=desired_mean, scale=np.sqrt(desired_variance), size=Nodes)
sort_r = np.sort(r)
r1 = sort_r[::-1]
r1 = r1.reshape(1, Nodes)
r2 = r.copy()
np.random.shuffle(r2.ravel()[1:])
r2 = r2.reshape(1, Nodes)
maximum = r2.max()
indice1 = np.where(r2 == maximum)
r2[indice1] = r2[0][0]
r2[0][0] = maximum
r2[0][Nodes-1] = maximum
mean = np.mean(r)
var = np.var(r)
std = np.std(r)
# Calculate the rounded mean and variance for the file name
rounded_mean = "{:.1f}".format(desired_mean)
rounded_variance = "{:.1f}".format(desired_variance)
with open(os.path.join(parent_folder, rf"Inv_Radius_{Nodes}_{rounded_mean}_{rounded_variance}ND.csv"), 'w+') as f:
np.random.shuffle(r2[0][1:-1])
inv_r = 1/r2
writer = csv.writer(f)
writer.writerows(inv_r)
for x in range(Runs):
function(x)
字符串
错误是
Traceback (most recent call last):
File ~\AppData\Local\anaconda3\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\debanikb\onedrive - technion\research_technion\python_pnm\surfactant a-d\testing\var_5\normal_6.py:67
function(x)
File c:\users\debanikb\onedrive - technion\research_technion\python_pnm\surfactant a-d\testing\var_5\normal_6.py:26 in function
seed = np.random.randint(start_seed, end_seed + 1)
File mtrand.pyx:746 in numpy.random.mtrand.RandomState.randint
File _bounded_integers.pyx:1336 in numpy.random._bounded_integers._rand_int32
ValueError: high is out of bounds for int32
型
1条答案
按热度按时间r7xajy2e1#
排成一行
字符串
你想用它来生成种子
型
错误消息告诉您
ValueError: high is out of bounds for int32
。您的end_seed = 1e100
是问题所在,因为它超出了int32
数据类型能够容纳的范围。numpy中int32
数据类型的范围是-2147483648到2147483647。所以
end_seed
的值不能超过2147483647。那么它就不会再抛出错误了。