Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决此错误:索引3超出大小为3的轴0的界限?_Python_Index Error - Fatal编程技术网

Python 如何解决此错误:索引3超出大小为3的轴0的界限?

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 当我运行它时,我得到以下错误 回溯

我不知道如何用语言表达这个问题,但仍然

我在运行代码时遇到此错误:

索引3超出大小为3的轴0的界限

我如何解决这个问题

我的代码是非常大的python包装器,因为它是某些模型的一部分,所以我真的无法复制和粘贴所有这些代码

我需要提供一个.yaml输入文件,其中输入部分显示

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
时,是raises
indexer
。无论如何,你需要看看
self.mdict[“TPheight”]
和其他键的形状。你说你有四次仪器扫描,但如果这些扫描在
self.mdict[“…”内
你得到了一个
索引器
ii=3
时,self.mdct的构造方式出现了一些问题。换句话说,你需要看看你是如何填充
self.mdct
的,并确保所有四个扫描都被添加。请在np.transpose调用周围再显示一些代码好的。我是addng的部分代码!这是一个类,希望足以理解问题!以上编辑!如何在stackoverflow中提出好问题