Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 索引器错误:使用另一个数组索引数组时索引过多_Python_Arrays_Indexing - Fatal编程技术网

Python 索引器错误:使用另一个数组索引数组时索引过多

Python 索引器错误:使用另一个数组索引数组时索引过多,python,arrays,indexing,Python,Arrays,Indexing,我知道很多人都问过这个错误,但我还没有找到任何可以帮助我的东西 这是我的代码: def nanalyze(pupil, pw_sim): import numpy as np temp_s = abs(pw_sim)**2 * pupil vals_x, vals_y = np.where(pupil > 0) mask = pupil[vals_x[0]:vals_x[len(vals_x)-1], vals_y[0]:vals_y[len(vals_

我知道很多人都问过这个错误,但我还没有找到任何可以帮助我的东西

这是我的代码:

def nanalyze(pupil, pw_sim):
    import numpy as np

    temp_s = abs(pw_sim)**2 * pupil

    vals_x, vals_y = np.where(pupil > 0)
    mask = pupil[vals_x[0]:vals_x[len(vals_x)-1], vals_y[0]:vals_y[len(vals_y)-1]]

    s_i = (np.mean(temp_s[tuple(mask)]**2) / (np.mean(temp_s[tuple(mask)])**2)) - 1
    return s_i
倒数第二行s_i=np.meantemp_s[tuplemask]**2/np.meantemp_s[tuplemask]**2-1返回索引错误:索引太多


瞳孔和pw_sim分别为10241024形状的阵列。因此,temp_s也是一个10241024阵列,而mask最终是一个10231023阵列。我试着制作了一个10241024掩码,以检查是否仅仅因为形状不同而导致索引错误,但这似乎没有改变任何事情。

您可能应该阅读有关numpy的内容,有时称为花式索引


你的问题不清楚你想用temp_s[面具]做什么。如果面具真的是一个面具,你需要确保它有dtype bool和temp_的形状。如果它不是一个掩码,你需要更好地解释你想做什么。

事实证明,简化和使用不同的语法解决了这个问题。现在,而不是

vals_x, vals_y = np.where(pupil > 0)
mask = pupil[vals_x[0]:vals_x[len(vals_x)-1], vals_y[0]:vals_y[len(vals_y)-1]]

s_i = (np.mean(temp_s[tuple(mask)]**2) / (np.mean(temp_s[tuple(mask)])**2)) - 1
我有

temp_s_nz = np.mean(temp_s[pupil >0])
temp_sq_nz = np.mean(temp_s[pupil >0]**2)

s_i = (temp_sq_nz) / (temp_s_nz)**2 - 1

这个改变是由我的导师做的,所以我不能完全解释为什么它能工作,但我知道不再有任何错误,代码也更容易阅读。我认为这是因为瞳孔>0的定义方式;在我最初的代码中有错误的空间,现在没有了。感谢您的帮助。

这应该做什么:临时任务[tuplemask]?它应该使用掩码索引临时任务。我从Matlab代码中翻译了这整件事,该代码将其作为temp_smask。如果你要创建一个元组,就我所知,它不能用作索引。嗯。我最初把它作为temp_s[mask]使用,但我得到一个不同的错误,说我不能使用mask作为索引。事实上,我在这个网站上发现了一个可以通过使用tupleThanks来纠正的错误,我将对此进行调查。mask是我正在使用的模块的一个mask,但它不是一个会有数据类型bool的mask。关于temp_s[mask],我只知道它应该使用mask索引temp_。