Python 如何解决此错误:索引3超出大小为3的轴0的界限?
我不知道如何用语言表达这个问题,但仍然 我在运行代码时遇到此错误: 索引3超出大小为3的轴0的界限 我如何解决这个问题 我的代码是非常大的python包装器,因为它是某些模型的一部分,所以我真的无法复制和粘贴所有这些代码 我需要提供一个.yaml输入文件,其中输入部分显示Python 如何解决此错误:索引3超出大小为3的轴0的界限?,python,index-error,Python,Index Error,我不知道如何用语言表达这个问题,但仍然 我在运行代码时遇到此错误: 索引3超出大小为3的轴0的界限 我如何解决这个问题 我的代码是非常大的python包装器,因为它是某些模型的一部分,所以我真的无法复制和粘贴所有这些代码 我需要提供一个.yaml输入文件,其中输入部分显示 scan_idx: - 0 - 1 - 2 当我运行这个程序时,效果很好,但是当我再添加一个数字时,因为我需要从我的仪器中添加四个扫描 scan_idx: - 0 - 1 - 2 - 3 当我运行它时,我得到以下错误 回溯
scan_idx:
- 0
- 1
- 2
当我运行这个程序时,效果很好,但是当我再添加一个数字时,因为我需要从我的仪器中添加四个扫描
scan_idx:
- 0
- 1
- 2
- 3
当我运行它时,我得到以下错误
回溯(最近一次呼叫最后一次):文件“PYTHON/MMFprofiling.py”,第1096行,在
mout,heights=mmf.run_both()
文件“PYTHON/MMFprofiling.py”,第917行,在run\u tware中
mmfaer=self.run\u mmf(“气溶胶”,self.solo)
文件“PYTHON/MMFprofiling.py”,第972行,在run\u mmf中
tph=np.transpose(np.stack([self.mdict[“TPheight”]),self.mdict[“pressure”][ii] 索引器:索引3超出大小为3的轴0的界限 我真的不知道我应该在这里展示代码的哪一部分,因为我对Python非常陌生,但这行代码似乎有问题
tph = np.transpose(np.stack([self.mdict["TPheight"], self.mdict["pressure"][ii], self.mdict["temperature"][ii]]))
它应该工作正常,没有错误
守则:
class MMF_alone(object):
def __init__(self, mdict):
self.aerosol = mdict["aerosol"]
self.tracegas = mdict["tracegas"]
self.mdict = mdict
def run_both(self):
mmfaer = self.run_mmf("aerosol", self.aerosol)
mmftg = self.run_mmf("tracegas", self.tracegas, mmfaer)
mmfresults, heights = self.output(mmfaer, mmftg)
return mmfresults, heights
def run_mmf(self, what, mgas, aer=None):
if "tracegas" in what:
is_tracegas = True
elif "aerosol" in what:
is_tracegas = False
if self.mdict["multiprocs"]:
task_queue = multiprocessing.Manager().Queue()
done_queue = multiprocessing.Manager().Queue()
else:
results = []
mmf = []
reslist = []
for ii, scan in enumerate(self.mdict["scan_idx"]):
gasdict = {"dscd": mgas["dscd"][ii],
"dscd_err": mgas["dscd_err"][ii],
"wavelength": mgas["wavelength"],
"name": mgas["name"],
"sys_error_frac": self.mdict[
"systematic_errors"][mgas["name"]]}
if is_tracegas:
if scan == aer["scan_number"][ii]:
print("scan", ii, " is ok", flush=True)
else:
raise ValueError("scan index inconsitence, tg: " +
str(scan) + " aerosol: " + str(
aer["scan_number"][ii]))
ae_prof = aer["profile"][ii]
ae_tau = aer["aod"][ii]
if self.mdict["angstrom_exponent"][ii] != 0:
ae_tau = (
(float(mgas["wavelength"]) / float(
self.aerosol["wavelength"])
)**(-self.mdict["angstrom_exponent"][ii])*ae_tau)
else:
ae_prof = None
ae_tau = self.mdict["aod_apriori"]
if (self.mdict["aeasym"]).ndim == 1:
asy = self.mdict["aeasym"][ii]
else:
asy = np.interp(gasdict["wavelength"], self.mdict["aewav"],
self.mdict["aeasym"][ii])
#if "default" in self.mdict["aessa_source"]:
if (self.mdict["aessa"]).ndim == 1:
ssa = self.mdict["aessa"][ii]
else:
ssa = np.interp(gasdict["wavelength"], self.mdict["aewav"],
self.mdict["aessa"][ii])
tph = np.transpose(
np.stack([self.mdict["TPheight"], self.mdict["pressure"][ii],
self.mdict["temperature"][ii]]))
mmf.append(MMF(
self.mdict["MMFtempdir"], tph.astype(str),
str(self.mdict["z_detector"]), scan,
self.mdict["mmfinputs_specific"], gasdict,
self.mdict["RAA"][ii], self.mdict["SZA"][ii],
self.mdict["el_ang"][ii], ae_prof, ae_tau, mgas["name"],
self.mdict["mmfinputs"], self.mdict["mmfexe_tg"],
self.mdict["mmfexe_ae"], asy, ssa,
self.mdict["surface_albedo"], self.mdict["dimang"]))
if self.mdict["multiprocs"]:
if is_tracegas:
task_queue.put((mmf[ii].run_tg, scan))
else:
task_queue.put((mmf[ii].run_ae, scan))
else:
if is_tracegas:
reslist.append(mmf[ii].run_tg())
else:
reslist.append(mmf[ii].run_ae())
if self.mdict["multiprocs"]:
for ii in range(self.mdict["procs"]):
task_queue.put("STOP")
proclist = []
for ii in range(self.mdict["procs"]):
proclist.append(Process(target=processwrapper,
args=(task_queue, done_queue)))
print("started process", ii, flush=True)
proclist[-1].start()
for proc in proclist:
proc.join()
print("joined", proc)
for ii in range(done_queue.qsize()):
mres = done_queue.get()
reslist.append(mres)
mmf_result = MMFresults()
local_erc = mmf_result.join(reslist)
return mmf_result
def output(self, mmf_aerosols, mmf_tracegases):
'''
Collect data into a single results dictionary with correct keys
Parameters:
-----------
mmf_aerosols: dictionary
dictionary holding aerosol results
mmf_tracegases: dictionary
dictionary holding tracegas results
Returns:
-------
mmfout: dictionary
results dictionary
'''
MMFdict = yaml.load(open(self.mdict["template"]))
mmfout = {}
# for aer in mmf_aerosols.keys():
orig_layerthickness = mmf_aerosols.pop("layerthickness")
mmf_aerosols.pop("scan_number")
version = mmf_aerosols.pop("version")
mmfheights = mmf_aerosols.pop("middleheights")
key="O4"
for key in mmf_aerosols.keys():
mentry = copy.deepcopy(MMFdict[key+"_aer"])
mkey = mentry["name"].replace("aer/", "O4/")
mdata = mmf_aerosols[key]
mentry["value"] = mdata
mentry["_FillValue"] = FillVals[mentry["_FillValue"]]
mentry["name"] = mentry["name"].replace("aer/","")
mmfout[mkey] = mentry
mfout = {}
mfout["O4"] = mmfout
mmfout = {}
mmf_tracegases.pop("scan_number")
for key in mmf_tracegases:
mentry = copy.deepcopy(MMFdict[key+"_tg"])
# consult the tg key and find the correct name and stuff
mkey = mentry["name"].replace(
"tg/", self.tracegas["name"].upper() + "/")
mdata = mmf_tracegases[key]
mentry["value"] = mdata
mentry["name"] = mentry["name"].replace("tg/","")
mentry["_FillValue"] = FillVals[mentry["_FillValue"]]
mmfout[mkey] = mentry
mfout["TG"] = mmfout
mfout["attributes"]= {}
mfout["attributes"]["version"] = version
return mfout, mmfheights
ii等于什么?@mauve:
ii
可能是他的循环索引,当它到达3
时,是raisesindexer
。无论如何,你需要看看self.mdict[“TPheight”]
和其他键的形状。你说你有四次仪器扫描,但如果这些扫描在self.mdict[“…”内
你得到了一个索引器
当ii=3
时,self.mdct的构造方式出现了一些问题。换句话说,你需要看看你是如何填充self.mdct
的,并确保所有四个扫描都被添加。请在np.transpose调用周围再显示一些代码好的。我是addng的部分代码!这是一个类,希望足以理解问题!以上编辑!如何在stackoverflow中提出好问题