2016-01-22 14 views
8

Sto implementando fft come parte dei miei compiti. Il mio problema sta nell'implementazione di mischiare elementi di dati usando l'inversione di bit. Ottengo il seguente avviso:solo interi, slice (`:`), ellissi (`...`), numpy.newaxis (`None`) e interi o booleani sono indici validi

DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future.

data[x], data[y] = data[y], data[x]

E il sistema di classificazione automatica (fornito dalla University) restituisce i seguenti:

error: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices.

Il mio codice è:

def shuffle_bit_reversed_order(data: np.ndarray) -> np.ndarray: 
    """ 
    Shuffle elements of data using bit reversal of list index. 

    Arguments: 
    data: data to be transformed (shape=(n,), dtype='float64') 

    Return: 
    data: shuffled data array 
    """ 

    # implement shuffling by reversing index bits 

    size = data.size 

    half = size/2; 

    for x in range(size): 
     xx = np.int(x) 
     n = np.int(half) 

     y = 0 

     while n > 0: 
      y += n * np.mod(xx,2) 
      n /= 2 
      xx = np.int(xx /2) 

     if (y > x): 

      data[x], data[y] = data[y], data[x] 

    return data 

mi hanno già attuato la funzione per fft ma non funzionerà fino a quando non avrò funzionato questa funzione di shuffling. Penso che il problema è che i miei dati sono di tipo 'float64' e potrei averlo usato come un intero ma non so come posso risolverlo.

+1

Qual è il valore di 'y' quando si riceve quell'errore? – Barmar

risposta

14

Credo che il tuo problema sia questo: nel tuo ciclo while, n è diviso per 2, ma non viene mai lanciato come un numero intero di nuovo, quindi diventa un float ad un certo punto. Viene quindi aggiunto su y, che è anche un float e che ti dà l'avviso.

4

È possibile utilizzare // invece di singolo /. Questo converte in int direttamente.