加载 npz 文件抱怨 "ModuleNotFoundError"
Load npz file complains about "ModuleNotFoundError"
我正在将一些数据保存到 npz 文件中,然后加载它。但是当我尝试访问它的一部分时,根据我 运行 加载脚本的位置,它会抱怨 ModuleNotFoundError (并且模块名称是保存数据的文件正在使用,但不需要什么我现在正在加载)。
我错过了什么?加载如何抱怨我保存数据的脚本中的导入或模块?
保存示例代码:
import signals_generator.simulate as sig_simulator
(...)
def gen_sig(file_path, freq_in, freq_audio, bpm_s, time_tt, var_fac):
freq = freq_in
dec_i, dec_q, trigger_times, ecg_labels, all_hr, time_all, sig = sig_simulator.get_gen_signal_to_eval(bpm_s,
time_tt, freq,
variation_factor=var_fac)
sig_t = []
sig_t.append(sig.real)
sig_t.append(sig.imag)
sig_t.append(trigger_times[TriggerSource.SYSTOLE])
# plt.plot(sig_t[0])
# plt.plot(sig_t[1])
# plt.show()
scope_trigger = np.ones_like(sig_t[0]) * (-2)
scope_trigger[200:400] = 2
total_s = int(freq_audio * len(test_signal[0]) / freq_in)
filt_sig = sy.resample(test_signal, total_s, axis=1)
# add dict with settings
settings = {"BPM": [], "TOTAL_TIME": [], "FREQ": [], "DEFAULT_BPM_VARIATION_FACTOR": []}
settings['BPM'].append(bpm_s)
settings['TOTAL_TIME'].append(time_tt)
settings['FREQ'].append(freq)
settings['DEFAULT_BPM_VARIATION_FACTOR'].append(var_fac)
np.savez(file_path, SETTINGS=settings, OFSDM_I=dec_i, OFSDM_Q=dec_q, OUT_SIG_T=filt_sig, TRIGGER_TIMES=trigger_times, ECG_LABELS=ecg_labels, ALL_HR=all_hr,
TIME_ALL=time_all, SIG=sig)
加载:
import numpy as np
tp = r"..\saved_data"
data_gen_t = np.load(tp + ".npz",
allow_pickle=True)
temp_trigger_times_t = dict(enumerate(data_gen_t['TRIGGER_TIMES'].flatten(), 1))
问题是,即使我这样做了:
data_gen_t['TRIGGER_TIMES']
我收到错误:
(...)
array = pickle.load(fp, **pickle_kwargs)
ModuleNotFoundError: No module named 'signals_generator'
“signals_generator”是我保存文件的导入文件。
如果我 运行 这个用于其他地方,它甚至看起来像找到了 signals_generator 但随后抱怨包含该文件。但是负载与生成保存数据的脚本有什么关系?
File "C:\Python\Python39\lib\site-packages\numpy\lib\format.py", line 748, in read_array
array = pickle.load(fp, **pickle_kwargs)
File "C:\username\signals_generator\simulate.py", line 3, in
<module>
from beattrain import BeatTrain
ModuleNotFoundError: No module named 'beattrain'
此外,trigger_times 是一个列表字典。
关于 problem/fix 可能是什么的任何提示?
谢谢!
保存的 trigger_times 对其字典中的元素使用了 class IntEnum,所以我猜它可能由于 pickle 而使其依赖(我不知道它是如何工作的的背景)。现在在保存之前,我将字典的元素从 class 枚举更改为字符串,现在它可以工作了。
我的结论:
如果使用更复杂的信息,以这种方式保存 npz 可能会与生成数据的文件保持依赖关系。
我正在将一些数据保存到 npz 文件中,然后加载它。但是当我尝试访问它的一部分时,根据我 运行 加载脚本的位置,它会抱怨 ModuleNotFoundError (并且模块名称是保存数据的文件正在使用,但不需要什么我现在正在加载)。 我错过了什么?加载如何抱怨我保存数据的脚本中的导入或模块?
保存示例代码:
import signals_generator.simulate as sig_simulator
(...)
def gen_sig(file_path, freq_in, freq_audio, bpm_s, time_tt, var_fac):
freq = freq_in
dec_i, dec_q, trigger_times, ecg_labels, all_hr, time_all, sig = sig_simulator.get_gen_signal_to_eval(bpm_s,
time_tt, freq,
variation_factor=var_fac)
sig_t = []
sig_t.append(sig.real)
sig_t.append(sig.imag)
sig_t.append(trigger_times[TriggerSource.SYSTOLE])
# plt.plot(sig_t[0])
# plt.plot(sig_t[1])
# plt.show()
scope_trigger = np.ones_like(sig_t[0]) * (-2)
scope_trigger[200:400] = 2
total_s = int(freq_audio * len(test_signal[0]) / freq_in)
filt_sig = sy.resample(test_signal, total_s, axis=1)
# add dict with settings
settings = {"BPM": [], "TOTAL_TIME": [], "FREQ": [], "DEFAULT_BPM_VARIATION_FACTOR": []}
settings['BPM'].append(bpm_s)
settings['TOTAL_TIME'].append(time_tt)
settings['FREQ'].append(freq)
settings['DEFAULT_BPM_VARIATION_FACTOR'].append(var_fac)
np.savez(file_path, SETTINGS=settings, OFSDM_I=dec_i, OFSDM_Q=dec_q, OUT_SIG_T=filt_sig, TRIGGER_TIMES=trigger_times, ECG_LABELS=ecg_labels, ALL_HR=all_hr,
TIME_ALL=time_all, SIG=sig)
加载:
import numpy as np
tp = r"..\saved_data"
data_gen_t = np.load(tp + ".npz",
allow_pickle=True)
temp_trigger_times_t = dict(enumerate(data_gen_t['TRIGGER_TIMES'].flatten(), 1))
问题是,即使我这样做了:
data_gen_t['TRIGGER_TIMES']
我收到错误:
(...)
array = pickle.load(fp, **pickle_kwargs)
ModuleNotFoundError: No module named 'signals_generator'
“signals_generator”是我保存文件的导入文件。
如果我 运行 这个用于其他地方,它甚至看起来像找到了 signals_generator 但随后抱怨包含该文件。但是负载与生成保存数据的脚本有什么关系?
File "C:\Python\Python39\lib\site-packages\numpy\lib\format.py", line 748, in read_array
array = pickle.load(fp, **pickle_kwargs)
File "C:\username\signals_generator\simulate.py", line 3, in
<module>
from beattrain import BeatTrain
ModuleNotFoundError: No module named 'beattrain'
此外,trigger_times 是一个列表字典。
关于 problem/fix 可能是什么的任何提示?
谢谢!
保存的 trigger_times 对其字典中的元素使用了 class IntEnum,所以我猜它可能由于 pickle 而使其依赖(我不知道它是如何工作的的背景)。现在在保存之前,我将字典的元素从 class 枚举更改为字符串,现在它可以工作了。
我的结论: 如果使用更复杂的信息,以这种方式保存 npz 可能会与生成数据的文件保持依赖关系。