2016-01-22 6 views
8

मैं अपने होमवर्क के हिस्से के रूप में एफएफटी लागू कर रहा हूं। मेरी समस्या बिट रिवर्सल का उपयोग कर डेटा तत्वों को घुमाने के कार्यान्वयन में निहित है।केवल पूर्णांक, स्लाइस (`:`), इलिप्सिस (`...`), numpy.newaxis (`none`) और पूर्णांक या बूलियन सरणी वैध सूचकांक

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]

और ऑटो ग्रेडिंग प्रणाली (विश्वविद्यालय द्वारा प्रदान की) रिटर्न निम्नलिखित: मैं निम्नलिखित चेतावनी मिलती है

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

मेरे कोड है:

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 

मैं पहले से ही लागू कर दिया है एफएफटी के लिए काम करें, लेकिन जब तक मैं इस शफल कार्य को काम नहीं कर लेता तब तक यह काम नहीं करेगा। मुझे लगता है कि समस्या यह है कि मेरा डेटा 'float64' प्रकार का है और मैंने इसे एक पूर्णांक के रूप में उपयोग किया होगा, लेकिन मुझे नहीं पता कि मैं इसे कैसे हल कर सकता हूं।

+1

आपको त्रुटि मिलने पर 'y' का मान क्या है? – Barmar

उत्तर

14

मेरा मानना ​​है कि आपकी समस्या यह है: आपके लूप में, n को 2 से विभाजित किया गया है, लेकिन फिर कभी पूर्णांक के रूप में नहीं डाला जाता है, इसलिए यह किसी बिंदु पर एक फ्लोट बन जाता है। फिर इसे वाई पर जोड़ा जाता है, जो तब भी एक फ्लोट होता है, और यह आपको चेतावनी देता है।

4

आप एकल/बजाय के बजाय // का उपयोग कर सकते हैं। यह सीधे int में परिवर्तित हो जाता है।

संबंधित मुद्दे