web-dev-qa-db-ja.com

整数、スライス( `:`)、省略記号( `...`)、numpy.newaxis( `None`)および整数またはブール配列のみが有効なインデックスです

私は宿題の一部としてfftを実装しています。私の問題は、ビット反転を使用したデータ要素のシャッフルの実装にあります。次の警告が表示されます。

DeprecationWarning:整数の代わりに非整数の数値を使用すると、将来エラーが発生します。

data [x]、data [y] = data [y]、data [x]

また、自動評価システム(大学が提供)は次を返します。

エラー:有効なインデックスは、整数、スライス(:)、省略記号(...)、numpy.newaxis(None)、および整数またはブール配列のみです。

私のコードは:

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

私はすでにfftの関数を実装していますが、このシャッフル関数が機能するまで機能しません。問題は、データが「float64」型であり、整数として使用した可能性があると思いますが、どのように解決できるかわかりません。

28
MessitÖzil

あなたの問題はこれだと思います:あなたのwhileループでは、nは2で除算されますが、再び整数としてキャストされることはないため、ある時点でfloatになります。その後、yに追加されます。これはフロートでもあり、警告が表示されます。

26
L. Hovan

単一の/の代わりに//を使用できます。それはintに直接変換します。

17
Sarvagya Gupta