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

Posted

技术标签:

【中文标题】只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引【英文标题】:only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices 【发布时间】:2016-04-29 09:42:08 【问题描述】:

我正在实施 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”类型的,我可能将它用作整数,但我不知道如何解决它。

【问题讨论】:

当您收到该错误时,y 的值是多少? 【参考方案1】:

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

【讨论】:

【参考方案2】:

您可以使用 // 而不是单个 /。直接转换为int

【讨论】:

像魅力一样工作 那是票!【参考方案3】:

在所有voxelCoord 的前面放一个int...如下所示:

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)]

【讨论】:

以上是关于只有整数、切片 (`:`)、省略号 (`...`)、numpy.newaxis (`None`) 和整数或布尔数组是有效的索引的主要内容,如果未能解决你的问题,请参考以下文章

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

TypeError:只有整数、切片、省略号、tf.newaxis 和标量 tf.int32/tf.int64 张量是有效的索引

Python 只有整数、切片...和整数或布尔数组是有效的索引

使用 scikit 学习的一种热编码和熊猫

Python错误IndexError:只有整数

是否有与 NumPy 的省略号切片语法 (...) 等效的 Julia?