只有整数、切片(`:`)、省略号(`...`)、numpy.newaxis(`None`)和整数或布尔数组是有效索引

vi4fp9gy  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(98)

我正在实现fft作为我家庭作业的一部分。我的问题在于使用位反转来实现数据元素的混洗。我得到以下警告:
弃用警告:使用非整数而不是整数将在将来导致错误。
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的函数,但是在我得到这个 Shuffle 函数之前,它不会工作。我认为问题是我的数据是'float64'类型,我可能把它用作整数,但我不知道如何解决它。

wqnecbli

wqnecbli1#

我相信你的问题是:在你的while循环中,n被2除,但再也不会转换为整数,所以它在某个时候变成了浮点数。然后它被加到y上,y也是一个浮点数,这给了你警告。

58wvjzkj

58wvjzkj2#

你可以使用//代替单个的/。直接转换为int

3yhwsihp

3yhwsihp3#

把一个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)]

相关问题