当前位置: 首页 > 知识库问答 >
问题:

只有整数标量数组可以转换为标量索引

柳经纶
2023-03-14

我正在尝试一个来自github链接的tensorflow的简单演示代码
我目前正在使用python版本3.5。2

Z:\downloads\tensorflow_demo-master\tensorflow_demo-master>py Python
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32<br> Type "help", "copyright", "credits" or "license" for more information.

我在命令行中尝试board.py时遇到了这个错误。我已经安装了运行此操作所需的所有依赖项。

def _read32(bytestream):
    dt = numpy.dtype(numpy.uint32).newbyteorder('>')
    return numpy.frombuffer(bytestream.read(4), dtype=dt)

def extract_images(filename):
    """Extract the images into a 4D uint8 numpy array [index, y, x, depth]."""
    print('Extracting', filename)
    with gzip.open(filename) as bytestream:
        magic = _read32(bytestream)
        if magic != 2051:
            raise ValueError(
                'Invalid magic number %d in MNIST image file: %s' %
                (magic, filename))
        num_images = _read32(bytestream)
        rows = _read32(bytestream)
        cols = _read32(bytestream)
        buf = bytestream.read(rows * cols * num_images)
        data = numpy.frombuffer(buf, dtype=numpy.uint8)
        data = data.reshape(num_images, rows, cols, 1)
    return data

Z:\downloads\tensorflow_demo-master\tensorflow_demo-master>py board.py
Extracting  Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz
Traceback (most recent call last):  
File "board.py", line 3, in <module>
    mnist = input_data.read_data_sets(r'Z:/downloads/MNIST dataset', one_hot=True)  
File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file) 
File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 40, in extract_images
    buf = bytestream.read(rows * cols * num_images) 
File "C:\Users\surak\AppData\Local\Programs\Python\Python35\lib\gzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index

共有3个答案

左丘宜年
2023-03-14

此文件可能已损坏:

Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz

让我们分析一下你发布的错误。

这表示代码当前正在处理相关文件:

Extracting  Z:/downloads/MNIST dataset\train-images-idx3-ubyte.gz

Traceback表示如下所示的堆栈跟踪:

Traceback (most recent call last):

这表示您从'Z:/downloads/MNIST dataset'读取数据集:

File "board.py", line 3, in <module>
    mnist = input_data.read_data_sets(r'Z:/downloads/MNIST dataset', one_hot=True)

这表示代码正在提取图像:

File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 150, in read_data_sets
    train_images = extract_images(local_file)

这表示代码需要读取row*ol*num_images字节:

File "Z:\downloads\tensorflow_demo-master\tensorflow_demo-master\input_data.py", line 40, in extract_images
    buf = bytestream.read(rows * cols * num_images)

这是一行错误:

File "C:\Users\surak\AppData\Local\Programs\Python\Python35\lib\gzip.py", line 274, in read
    return self._buffer.read(size)
TypeError: only integer scalar arrays can be converted to a scalar index

我认为size是有问题的值,是在stacktrace的前一行计算的。

我至少可以看到两种方法。

>

  • 删除违规文件,看看问题是否消失。这将允许您验证文件是否以某种方式损坏。

    使用调试器进入代码,然后检查用于计算违规变量的值。利用获得的知识从那里开始。

  • 谢运良
    2023-03-14

    您提供的代码链接使用名为input\u data的单独文件。py使用板中的以下两行从MNIST下载数据。py

    import input_data 
    mnist = input_data.read_data_sets("/tmp/data/",one_hot=True)
    

    由于MNIST数据经常用于演示目的,Tensorflow提供了一种自动下载它的方法。

    board.py中的上述两行替换为以下两行,错误将消失。

    from tensorflow.examples.tutorials.mnist import input_data
    mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
    
    充小云
    2023-03-14

    您可以修改该函数:

    def _read32(bytestream):
        dt = numpy.dtype(numpy.uint32).newbyteorder('>')
        return numpy.frombuffer(bytestream.read(4), dtype=dt)
    

    新版本:

    def _read32(bytestream):
        dt = numpy.dtype(numpy.uint32).newbyteorder('>')
        return numpy.frombuffer(bytestream.read(4), dtype=dt)[0]
    

    最后添加[0]

    这似乎是最新版本Numpy的一个问题。最近的一项更改使将单个元素数组作为标量进行索引成为错误。

     类似资料:
    • 我为这个问题制作了两个数组的简单示例:是一个一维数组,索引处有标签,对应于nD数组的相同索引。我获取标签2出现的所有索引,并希望检索中的值。 因此,如果我想要标签2,我得到索引0和3,这应该给我相应数组中索引0和3的值。 但是当我想调用我的函数时,我收到一个TypeError@。 我的职能:

    • 我知道关于这个错误已经有几个问题了。但在这种特殊情况下,我不确定是否已经有了解决我问题的方法。我有这部分代码,我想打印数据帧df的“y”列。发生以下错误:TypeError:只有整数标量数组才能转换为标量索引 可以打印整个数据帧。这看起来像: 这是整个错误消息: 我认为这与numpy阵列有关。提前谢谢你!

    • 我试着用pylot来模拟单摆。为此,我创建了类钟摆,在其中一个方法中,我不断得到相同的错误。 错误代码为: 文件“C:\Users\Lucas\Anaconda3\envs\Spyder\lib\site packages\numpy\core\fromnumeric.py”,第47行,在_wrapitresult=getattr(asarray(obj),method)中(*args,**kwd

    • 我想从官方熊猫留档...DataFrame.fillna所以基本上用值1填充df数据框“myc”列中的NaN值。 数据帧 代码1 成果目标1 误差表第1页 代码2我后来还尝试列出any_feature列 错误2 尝试解决方案 Not dictionary - Pandas: Getting "TypeError: only integer scalar arrays can be converte

    • 数据文件:pattern1.ktx 结果:TypeError:只能将整数标量数组转换为标量索引 看起来够简单?不过我不明白。如何解决这个问题?谢谢你。 这个怎么样? 同样的错误。如何修复?

    • 我看到的代码是: 不同变量的值是: ID: 欠条: 阈值: