私は宿題の一部として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」型であり、整数として使用した可能性があると思いますが、どのように解決できるかわかりません。
あなたの問題はこれだと思います:あなたのwhileループでは、nは2で除算されますが、再び整数としてキャストされることはないため、ある時点でfloatになります。その後、yに追加されます。これはフロートでもあり、警告が表示されます。
単一の/の代わりに//を使用できます。それはint
に直接変換します。