2016-01-22 13 views
8

Ev ödevlerimin bir parçası olarak fft uyguluyorum. Benim sorunum, bit geri dönüşümünü kullanarak karıştırıcı veri öğelerinin uygulanmasında yatıyor. Aşağıdakisadece tamsayılar, dilimler (`:`), üç nokta (`...`), numpy.newaxis (`None`) ve tamsayı ya da boole dizileri geçerli dizinlerdir

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]

Ve (üniversite tarafından sağlanır) oto derecelendirme sistemi döndürür:

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

Benim kodudur:

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 

Zaten uygulamış aşağıdaki uyarıyı almak fft işlevi ancak bu karıştırma işlevini çalıştırana kadar çalışmaz. Problemin benim verilerimin 'float64' tipi olduğunu düşünüyorum ve onu tamsayı olarak kullanmış olabilirim ama nasıl çözebileceğimi bilmiyorum.

+1

Bu hatayı aldığınızda "y" değeri nedir? – Barmar

cevap

14

Sorununuzun şu olduğuna inanıyorum: while döngüsünde, n 2'ye bölünür, ancak bir tamsayı olarak tekrar yayınlanmaz, bu yüzden bir noktada bir kayan nokta olur. Daha sonra y üzerine eklenir, daha sonra bir float olur ve bu size uyarı verir.

4

Tek/yerine // kullanabilirsiniz. Bu doğrudan int'a dönüştürür.

İlgili konular