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

TypeError:只有整数标量数组才能转换为具有1D numpy索引数组的标量索引

谷梁博易
2023-03-14

我想写一个函数,根据提供的bin概率,从训练集中随机选取元素。我将集合索引划分为11个单元,然后为它们创建自定义概率。

bin_probs = [0.5, 0.3, 0.15, 0.04, 0.0025, 0.0025, 0.001, 0.001, 0.001, 0.001, 0.001]

X_train = list(range(2000000))

train_probs = bin_probs * int(len(X_train) / len(bin_probs)) # extend probabilities across bin elements
train_probs.extend([0.001]*(len(X_train) - len(train_probs))) # a small fix to match number of elements
train_probs = train_probs/np.sum(train_probs) # normalize
indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)
out_images = X_train[indices.astype(int)] # this is where I get the error

我得到以下错误:

TypeError: only integer scalar arrays can be converted to a scalar index with 1D numpy indices array

我觉得这很奇怪,因为我已经检查了我创建的索引数组。它是一维的,它是整数,它是标量。

我错过了什么?

注意:我试图通过astype(int)传递索引。同样的错误。


共有3个答案

胡桐
2023-03-14

生成此错误消息的简单案例:

In [8]: [1,2,3,4,5][np.array([1])]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-8-55def8e1923d> in <module>()
----> 1 [1,2,3,4,5][np.array([1])]

TypeError: only integer scalar arrays can be converted to a scalar index

一些有效的变体:

In [9]: [1,2,3,4,5][np.array(1)]     # this is a 0d array index
Out[9]: 2
In [10]: [1,2,3,4,5][np.array([1]).item()]    
Out[10]: 2
In [11]: np.array([1,2,3,4,5])[np.array([1])]
Out[11]: array([2])

基本python列表索引比numpy的更具限制性:

In [12]: [1,2,3,4,5][[1]]
....
TypeError: list indices must be integers or slices, not list

再看

indices = np.random.choice(range(len(X_train)), replace=False, size=50000, p=train_probs)

index是一个1d整数数组,但它肯定不是标量的。这是一个由50000个整数组成的数组。列表不能同时用多个索引进行索引,无论它们是在列表还是数组中。

张卓
2023-03-14

每当我以错误的方式使用np.concatenate时,我都会得到这个错误:

>>> a = np.eye(2)
>>> np.concatenate(a, a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 6, in concatenate
TypeError: only integer scalar arrays can be converted to a scalar index

正确的方法是将两个数组作为元组输入:

>>> np.concatenate((a, a))
array([[1., 0.],
       [0., 1.],
       [1., 0.],
       [0., 1.]])
史宸
2023-03-14

也许错误消息有些误导,但要点是X\u train是一个列表,而不是numpy数组。不能对其使用数组索引。首先将其设置为数组:

out_images = np.array(X_train)[indices.astype(int)]
 类似资料:
  • 我看到的代码是: 不同变量的值是: ID: 欠条: 阈值:

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

  • 我有一个名为self的浮动列表。数据,数据我把这个列表交给了peakutils。索引()如下所示: 索引=peakutils.indexes(self.data[_]['smooth_ISA'],thres=0.1,min_dist=50) 但是我得到了这个错误: 只有整数标量数组可以转换为标量索引 你认为发生了什么事? 谢谢

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

  • 我是相当新的python/Numpy和不完全意识到它。 我一直试图实现一个算法,并在某一点上卡住了,当试图把数组的点积与其转置。我得到的错误是 TypeError:只能将整数标量数组转换为标量索引。 下面是我的代码,供参考。

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