簡體   English   中英

Python 子模塊 class 實例生成

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM