J'implémente fft dans le cadre de mes devoirs. Mon problème réside dans la mise en œuvre de la réorganisation des éléments de données à l'aide de l'inversion de bits. Je reçois l'avertissement suivant:
DeprecationWarning: l'utilisation d'un nombre non entier à la place d'un entier entraînera une erreur dans le futur.
données [x], données [y] = données [y], données [x]
Et le système de notation automatique (fourni par l'université) renvoie ce qui suit:
erreur: seuls les entiers, les tranches (
:
), Ellipse (...
), numpy.newaxis (None
) et les tableaux entiers ou booléens sont des index valides.
Mon code est:
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
J'ai déjà implémenté la fonction pour fft mais ça ne marchera pas tant que je n'aurai pas cette fonction de brassage. Je pense que le problème est que mes données sont de type 'float64' et que je l’ai peut-être utilisées sous forme d’entier, mais je ne sais pas comment résoudre ce problème.
Je pense que votre problème est le suivant: dans votre boucle while, n est divisé par 2, mais n’est jamais converti sous forme d’entier, il devient donc un float à un moment donné. Il est ensuite ajouté à y, qui est également un float, ce qui vous avertit.
Vous pouvez utiliser // au lieu de single /. Cela convertit en int
directement.