IndexError:使用另一个数组索引数组时索引太多

时间:2015-07-31 21:36:48

标签: 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_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是返回索引错误:索引太多。

pupilpw_sim是形状(1024,1024)的每个数组。因此temp_s也是(1024,1024)数组,mask最终成为(1023,1023)数组。我已经尝试过mask一个(1024,1024)来查看我是否因为形状不同而得到索引错误,但这似乎没有改变任何东西。

2 个答案:

答案 0 :(得分:0)

您应该阅读numpy的advanced indexing,有时也称为“花式索引”。

从您的问题中不清楚您尝试使用temp_s[mask]做什么。如果蒙版确实是蒙版,则需要确保它具有dtype bool并且具有与temp_s相同的形状。如果它不是面具,你需要更好地解释你想要做的事情。

答案 1 :(得分:-1)

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

$('svg').on('hover', 'rec:not(.selected)', Map.tooltip);

我有

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 的定义方式;在我的原始代码中,它有错误的空间,现在没有。谢谢你的帮助。