[英]Python sub-module class instance generation
我想將隨機數的生成放入一個子模塊(“rv_gen.py”); 我不清楚是否在導入語句時生成隨機數數組(或 class?)的實例,還是僅在將其分配給變量rvclass
(在主模塊中)時生成?
令人費解的是時間:output(見下文)在我更改隨機數數組的大小后有所不同,並且花費了意外的時間(我預計 10M 正常 rvs 需要幾秒鍾):
更改(並保存)“rv_gen”后,立即打印下面 output 的前三行直到第二次print('rvs generation finished!')
,但是下一個打印語句'Time for import:...'需要幾分鍾(不僅僅是所說的“3.1秒”)。 緊接着剩下的三張照片緊隨其后。 我曾預計每個“rvs generation完成”打印之前的主要時間延遲......?
如果我只是重新運行主模塊而不對子模塊進行任何更改,則 output 類似,只是缺少下面的第一行print('rvs generation finished!')
,並且在現在讀取Time for import: 0.3 seconds
的語句之前不需要額外的分鍾Time for import: 0.3 seconds
。
主模塊“main.py”:
import timeit
lastt = timeit.default_timer()
import rv_gen
thist = timeit.default_timer(); print('Time for import: %4.1f seconds.' % ( thist-lastt)) ; lastt = thist
rvclass = rv_gen.s
thist = timeit.default_timer(); print('Time for assignment: %4.1f seconds.' % ( thist-lastt)) ; lastt = thist
print(rvclass.rans[:5])
模塊“rv_gen.py”:
import numpy as np
class struct:
pass
s = struct()
s.rans = np.random.normal(size=1000*1000*50)
print('rvs generation finished!')
Output(更新 rv_gen.py 后):
rvs generation finished!
Reloaded modules: rv_gen
rvs generation finished!
Time for import: 3.1 seconds.
Time for assignment: 0.0 seconds.
[ 0.925 -0.728 2.387 -0.683 -0.021]
編輯:現在得到一個“MemoryError”:我只是在將隨機數組大小更改為 10M 后重新運行代碼,並得到以下 output(再次完成第一rvs generation finished!
打印輸出立即出現,rest 大約 3 分鍾后):
rvs generation finished!
[autoreload of rv_gen failed: Traceback (most recent call last):
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 245, in check
superreload(m, reload, self.old_objects)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 450, in superreload
update_generic(old_obj, new_obj)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 387, in update_generic
update(a, b)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 357, in update_class
update_instances(old, new)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 312, in update_instances
update_instances(old, new, obj.__dict__, visited)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 317, in update_instances
update_instances(old, new, obj, visited)
File "C:\Anaconda\lib\site-packages\IPython\extensions\autoreload.py", line 302, in update_instances
visited.update({id(obj):obj})
MemoryError
]
Reloaded modules: rv_gen
rvs generation finished!
Time for import: 0.4 seconds.
Time for assignment: 0.0 seconds.
[-0.091 1.087 -0.329 0.359 -1.884]
我正在使用 Anaconda Spyder 3.3.6 和 IPython。
rv_gen 中的語句將在導入時運行。 您的打印之間沒有太大的差距,即使在現代 PC 中生成 100k 隨機數也不會花費時間
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.