问题
I am implementing fft as part of my homework. My problem lies in the implemention of shuffling data elements using bit reversal. I get the following warning:
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]
And the auto grading system (provided by university) returns the following:
error: only integers, slices (
:
), ellipsis (...
), numpy.newaxis (None
) and integer or boolean arrays are valid indices.
My code is:
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
I have already implemented the function for fft but it won't work until I get this shuffling function working. I think the problem is my data is of type 'float64' and I may have used it as an integer but I don't know how I can solve it.
回答1:
I believe your problem is this: in your while loop, n is divided by 2, but never cast as an integer again, so it becomes a float at some point. It is then added onto y, which is then a float too, and that gives you the warning.
回答2:
You can use // instead of single /. That converts to int
directly.
回答3:
put a int
infront of the all the voxelCoord
's...Like this below :
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)]
来源:https://stackoverflow.com/questions/34952651/only-integers-slices-ellipsis-numpy-newaxis-none-and-intege