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

Numpy数组类型错误:只有整数标量数组可以转换为标量索引

彭海阳
2023-03-14
i=np.arange(1,4,dtype=np.int)
a=np.arange(9).reshape(3,3)

a
>>>array([[0, 1, 2],
          [3, 4, 5],
          [6, 7, 8]])
a[:,0:1]
>>>array([[0],
          [3],
          [6]])
a[:,0:2]
>>>array([[0, 1],
          [3, 4],
          [6, 7]])
a[:,0:3]
>>>array([[0, 1, 2],
          [3, 4, 5],
          [6, 7, 8]])

现在我想对数组进行矢量化,以便将它们打印在一起。我尽量

a[:,0:i]

a[:,0:i[:,None]]

它给出了TypeError:只有整数标量数组才能转换为标量索引

共有3个答案

萧辰沛
2023-03-14

这可能与这个特定的问题无关,但是我遇到了一个类似的问题,我在Python列表上使用NumPy索引,得到了相同的确切错误消息:

# incorrect
weights = list(range(1, 129)) + list(range(128, 0, -1))
mapped_image = weights[image[:, :, band]] # image.shape = [800, 600, 3]
# TypeError: only integer scalar arrays can be converted to a scalar index

事实证明,在应用多维NumPy索引之前,我需要将1D Python列表中的权重转换为NumPy数组。下面的代码工作:

# correct
weights = np.array(list(range(1, 129)) + list(range(128, 0, -1)))
mapped_image = weights[image[:, :, band]] # image.shape = [800, 600, 3]
张献
2023-03-14

当我冒险使用numpy.concatenate来模拟2D向量的类似C的推回时,我遇到了这个问题;如果A和B是两个2Dnumpy.arrays,那么numpy.concatenate(A,B)会产生错误。

修复方法是简单地添加缺少的括号:numpy.concatenate((A,B)),这是必需的,因为要连接的数组构成一个参数

姜嘉荣
2023-03-14

简短的回答:

[a[:,:j] for j in i]

您尝试执行的不是可矢量化的操作。Wikipedia将矢量化定义为单个数组上的批处理操作,而不是单个标量上的批处理操作:

在计算机科学中,数组编程语言(也称为向量或多维语言)概括了标量运算,以透明地应用于向量、矩阵和高维数组。

...

... 在整个阵列上运行的操作可以称为矢量化操作。。。

就CPU级优化而言,矢量化的定义为:

“矢量化”(简化)是重写循环的过程,因此它不需要对数组中的单个元素进行N次处理,而是(比如)同时对数组中的4个元素进行N/4次处理。

您案例中的问题是,每个单独操作的结果都有不同的形状:(3,1)(3,2)(3,3)。它们不能形成单个矢量化操作的输出,因为输出必须是一个连续数组。当然,它可以包含(3,1)(3,2)(3,3)数组(作为视图),但这就是原始数组a的功能。

您真正想要的只是一个计算所有表达式的表达式:

[a[:,:j] for j in i]

... 但从性能优化的角度来看,它不是矢量化的。引擎盖下是一个简单的for循环,它逐个计算每个项目。

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

  • 我正在尝试一个来自github链接的tensorflow的简单演示代码 我目前正在使用python版本3.5。2 我在命令行中尝试board.py时遇到了这个错误。我已经安装了运行此操作所需的所有依赖项。

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

  • 我正在使用Python 3.6。3号巨蟒。我正在努力: 然后出现了这个错误: 只有整数标量数组可以转换为标量索引 我查看了地图: 所以我想我正确地使用了。只是不确定如何显示地图结果。

  • 下面是代码: 我得到以下错误: 回溯(最后一次调用):文件“/Users/evgenypavlov/Documents/ml_tutorial_1/main.py”,第34行,在x_train=np中。重塑(x_列,(x_列.shape[0],x_列[1],1])文件“ 据我所知,我已经把它转换成np了。数组,那么什么会导致此问题以及如何解决它?

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