是否有一种方法可以从numpy.random.normal()的结果中获取数组的特定范围?无需计算所有随机数,仅计算所述范围限制
正常应用
random_numbers = numpy.random.normal(0, 1, 1000)
我想要的是获得此random_numbers的范围,而无需先全部计算
first_100_random_numbers = needs the results of the first 100 values
300th_400th_random_numbers = needs the results of the 300 - 400 values
答案 0 :(得分:1)
也许只是从np.random.RandomState
中提取它们:
import numpy as np
# random state
RS = np.random.RandomState(seed = 0)
# first 10 elments
print(RS.normal(0, 1, 10))
# another 20
print(RS.normal(0, 1, 20))
它可以缓解与相应种子相同的随机数。
first_100_random_numbers = RS.normal(0, 1, 100)
100th_200th_random_numbers = RS.normal(0, 1, 100)
200th_400th_random_numbers = RS.normal(0, 1, 200)
否则,您可以考虑使用发电机。
答案 1 :(得分:1)
如果一次生成一个随机数,则只需跟踪它们是否增加了最大值或最小值。您仍然必须计算这些值,但不会遇到内存问题,因为您只需要存储三个数字(最大,最小和最新随机数)
import numpy as np
max_=0
min_=0
for i in range(1000):
new_number=np.random.normal(0,1,1)
if new_number>max_:
max_=new_number
if new_number<min_:
min_=new_number
range_=max_-min_
print(range_)
要加快计算速度,可以一次执行更大的块。如果要运行十亿个数字,则可以一次计算一百万个,然后循环运行一千次。下面修改了代码和时间结果
import numpy as np
import time
max_=0
min_=0
start=time.time()
for i in range(1000):
new_array=np.random.normal(0,1,1000000)
new_max=np.max(new_array)
new_min=np.min(new_array)
if new_max>max_:
max_=new_max
if new_min<min_:
min_=new_min
range_=max_-min_
print('Range ', range_)
end = time.time()
Time=end - start
print('Time ',Time)
Range 12.421138327443614
Time 36.7797749042511
比较一次运行一个随机数与一次运行十个随机数的结果,以查看结果是否显着不同 (每次运行三遍)
一次一次:
new_numbers=[]
for i in range(10):
new_numbers.append(np.random.normal(0,1,1)[0])
print(new_numbers)
[-1.0145267697638918, -1.1291506481372602, 1.3622608858856742, 0.16024562390261188, 1.062550043104352, -0.4160329548439351, -0.05464203711515494, -0.7416629430695286, 0.35066071936940363, 0.06498345663995017]
[-1.5632632129838873, -1.0314300796946991, 0.5014408178125339, -0.37806631815396563, 0.45396918178048334, -0.6630479858064194, -0.47097483551189306, 0.40734077106402056, 1.1167819302886144, -0.6594075991871857]
[0.4448783416507262, 0.20160041940565818, -0.4781753245124433, -0.7130750653981222, -0.8035305391034386, -0.41543648761183466, 0.25166027175788847, -0.7051417978559822, 0.6017351178904993, -1.3719596304190458]
一次十个:
np.random.normal(0,1,10)
array([-1.79498658, 0.89073416, -0.25302627, -0.17237986, -0.38988131,
-0.93635678, 0.28824899, 0.52675642, 0.86195635, -0.89584341])
array([ 1.41602405, 1.33800937, 1.87837334, 0.2082182 , -0.25116545,
1.37953259, 0.34445565, -0.33647043, -0.24414261, -0.14505838])
array([ 0.43848371, -0.60967936, 1.2902231 , 0.44589728, -2.39725248,
-1.42715386, -1.0627627 , 1.15998483, 0.96427742, -2.01062938])