【发布时间】:2015-07-31 21:36:48
【问题描述】:
我知道很多人都问过这个错误,但我还没有找到任何可以帮助我的东西。
这是我的代码:
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) 来检查是否因为形状不同而出现索引错误,但这似乎并没有改变任何东西。
【问题讨论】:
-
这应该做什么:
temp_s[tuple(mask)]? -
它应该使用
mask索引temp_s。我从 Matlab 代码中翻译了整个内容,它的名称为temp_s(mask)。 -
如果您正在创建
tuple- 它不能用作索引(据我所知)。 -
嗯。我最初只是将它作为
temp_s[mask]使用,但我得到了一个不同的错误,说我不能使用掩码作为索引。我实际上在这个网站上找到了一个different question,它说可以通过使用tuple来纠正