2015-07-31 2 views
0

Я понимаю, что многие люди спрашивали об этой ошибке, но мне еще предстоит найти что-нибудь, что поможет мне.IndexError: Слишком много индексов при индексировании массива с другим массивом

Это мой код:

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 a (1024,1024), чтобы проверить, не получаю ли я индексную ошибку только из-за разницы в фигурах, но это ничего не меняет.

+0

Что ожидается от этого: 'temp_s [tuple (mask)]'? –

+0

Предполагается индексировать 'temp_s' с помощью' mask'. Я перевел все это из кода Matlab, который использовал его как temp_s (mask). – songbird813

+0

, если вы создаете 'tuple' - его нельзя использовать как индекс (насколько мне известно). –

ответ

-1

Оказалось, что упрощение и использование различного синтаксиса решают проблему. Теперь, вместо

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 

Это изменение было сделано моим наставником, так что я не могу в полной мере объяснить, почему это работает, но я не знаю, что больше нет никаких ошибок и код легче читать. Я думаю, что это работает из-за способа определения pupil >0; в моем исходном коде было место для ошибки в нем, а теперь нет. Спасибо за вашу помощь.

0

Возможно, вы должны прочитать о numpy's advanced indexing, который иногда называют «причудливым индексированием».

Неясно из вашего вопроса, что вы пытаетесь сделать с помощью temp_s[mask]. Если маска действительно маска, вам нужно убедиться, что она имеет dtype bool и имеет ту же форму, что и temp_s. Если это не маска, вам нужно лучше объяснить, что вы пытаетесь сделать.

+0

Спасибо , Я займусь этим. 'mask' является маской в ​​терминах модуля, который я использую, но это не маска, которая бы имела dtype' bool'. Все, что я знаю о 'temp_s [mask]', это то, что он должен индексировать 'temp_s', используя' mask'. – songbird813

Смежные вопросы