我意识到很多人都在询问这个错误,但我还没有找到任何可以帮助我的事情。
这是我的代码:
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
和pw_sim
是形状(1024,1024)
的每个数组。因此temp_s
也是(1024,1024)
数组,mask
最终成为(1023,1023)
数组。我已经尝试过mask
一个(1024,1024)
来查看我是否因为形状不同而得到索引错误,但这似乎没有改变任何东西。
答案 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
的定义方式;在我的原始代码中,它有错误的空间,现在没有。谢谢你的帮助。