только целые числа, срезы (`:`), многоточие (``), numpy.newaxis (`None`) и целочисленные или логические массивы являются допустимыми индексами

Я использую fft как часть своей домашней работы. Моя проблема заключается в реализации перетасовки элементов данных с использованием инверсии битов. Я получаю следующее предупреждение:

DeprecationWarning: использование нецелого числа вместо целого приведет к ошибке в будущем.

данные [x], данные [y] = данные [y], данные [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, и я мог использовать их как целое число, но не знаю, как это решить.


person MessitÖzil    schedule 22.01.2016    source источник
comment
Каково значение y, когда вы получаете эту ошибку?   -  person Barmar    schedule 22.01.2016


Ответы (3)


Я считаю, что ваша проблема заключается в следующем: в вашем цикле while n делится на 2, но никогда не переводится как целое число снова, поэтому в какой-то момент оно становится float. Затем он добавляется к y, который также является плавающим, и это дает вам предупреждение.

person L. Hovan    schedule 22.01.2016

Вы можете использовать // вместо одиночного /. Это напрямую преобразуется в int.

person Sarvagya Gupta    schedule 22.05.2017
comment
Работает как шарм - person Val Berthe; 28.03.2018
comment
Это был билет! - person JayJay123; 07.12.2019

поместите int перед всеми voxelCoord ... Как это показано ниже:

patch = numpyImage [int(voxelCoord[0]),int(voxelCoord[1])- int(voxelWidth/2):int(voxelCoord[1])+int(voxelWidth/2),int(voxelCoord[2])-int(voxelWidth/2):int(voxelCoord[2])+int(voxelWidth/2)]
person Vijay Meduri    schedule 13.11.2019