索引器错误:用另一个数组索引数组时索引太多

2021-05-16 08:54:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的代码:

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.mean(temp_s[tuple(mask)]**2) / (np.mean(temp_s[tuple(mask)])**2)) - 1,返回索引错误:索引太多。在

pupil和{}分别是形状(1024,1024)的数组。temp_s因此也是(1024,1024)数组,mask最后是(1023,1023)数组。我试着让maska(1024,1024)来检查我是否仅仅因为形状的不同而得到索引错误,但这似乎没有改变任何东西。在

2条回答
网友
1楼 ·

你可能应该读一下numpy的advanced indexing,有时称为“花式索引”。在

从你的问题中不清楚你想用temp_s[mask]做什么。如果mask实际上是一个mask,那么您需要确保它具有dtype bool,并且具有与temp_s相同的形状。如果不是面具,你需要更好地解释你想做什么。在

网友
2楼 ·

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

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

我有

^{pr2}$

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

相关问题