Python 索引器:索引6842超出大小为6842的轴0的界限

Python 索引器:索引6842超出大小为6842的轴0的界限,python,arrays,numpy,encoding,Python,Arrays,Numpy,Encoding,我知道这可能是一个相当愚蠢的错误,但我一直在坚持。我需要使用numpy对数组进行1-hot编码: numpy.版本==>1.18.5 print(array) [[ 3 1275 10 ... 1 2235 1] [ 0 0 0 ... 2 139 151] [1277 1278 1 ... 2239 831 1] ... [ 2 6833 28 ... 25 520 1] [ 0 0 0

我知道这可能是一个相当愚蠢的错误,但我一直在坚持。我需要使用numpy对数组进行1-hot编码:

numpy.版本==>1.18.5

print(array)
[[   3 1275   10 ...    1 2235    1]
 [   0    0    0 ...    2  139  151]
 [1277 1278    1 ... 2239  831    1]
 ...
 [   2 6833   28 ...   25  520    1]
 [   0    0    0 ...    4  481    1]
 [   0    0    0 ... 6842 6843    1]]


print(array.shape)
# (1250, 20)    

print(array_classes)
# 6842 
当我尝试创建数组的一个热编码时:

ohe = np.eye(array_classes)[array]
我得到这个错误:

IndexError                                Traceback (most recent call last)
<ipython-input-32-3a05df861550> in <module>()
      1 print(array_classes)
      2 print(array)
----> 3 ohe = np.eye(array_classes)[array]

IndexError: index 6842 is out of bounds for axis 0 with size 6842
以下是总类数:

 print(array_classes)
 # 6842
我创建具有类数的标识矩阵:

 matrix = np.eye(array_classes)
 print(matrix, matrix.shape)
[[1. 0. 0. ... 0. 0. 0.]
 [0. 1. 0. ... 0. 0. 0.]
 [0. 0. 1. ... 0. 0. 0.]
 ...
 [0. 0. 0. ... 1. 0. 0.]
 [0. 0. 0. ... 0. 1. 0.]
 [0. 0. 0. ... 0. 0. 1.]] (6843, 6843)
然后我将我的初始数组乘以我的单位矩阵,得到数组的1-hot编码版本:

ohe = matrix[array]
print(ohe, ohe.shape)

[[[0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  ...
  [0. 1. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 1. 0. ... 0. 0. 0.]]

 [[1. 0. 0. ... 0. 0. 0.]
  [1. 0. 0. ... 0. 0. 0.]
  [1. 0. 0. ... 0. 0. 0.]
  ...
  [0. 0. 1. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]
  [0. 0. 0. ... 0. 0. 0.]]] (2, 20, 6843)

通过使用
数组
可以使用高级索引。
array
中的值超出了由
np.eye

print(np.eye(array_classes).shape)
# (6842, 6842)
即,
np.eye
的结果是具有
6842行
6842列
的2d数组。其指数范围为
0-6841

现在,您可以使用
array

np.eye(array_classes)[array]

numpy使用
array
的每个值对
np.eye
输出进行索引。您的
数组
有几个大于6841的值,例如
6842、6843
。因此,当它击中第一个
6842
时,它出错了。

对我来说,这就是解决方案:

np.eye(array_classes + 1)[array]

因为我需要数组的最后一个索引是类的数量,所以我必须将+1添加到
np.eye()

让我们假设我有一个3个元素长的数组
myArray
<代码>[“a”、“b”、“c”]。要寻址数组的第一个元素,我需要
myArray[0]
。要处理最后一个元素,我需要
myArray[2]
。我知道,但我想我不明白为什么我的代码中会出现这个错误。
ohe
的结果应该是一个形状数组
(1250,206842)
您能详细说明预期结果吗?我不明白一个2D形状数组(1250,20)应该如何对一个(68426842)数组进行热编码;np.eye(5)是0和1的2D数组。然后处理这些值。唯一可以得出的结果是0和1。你能用一个较小的数组示例重新表述你的问题,但仍然可以完全重复,然后解释你期望的值吗?
1250
是句子的数量,
20
是每个句子的长度,
6842
是词汇表的长度。使用np.eye()我需要1-hot编码一个2D数组,它应该输出一个带有shape
(1250,206842)
的3D数组,创建一个3维1-hot编码感谢您的响应,我明白你的意思,但有什么解决办法吗?你要么需要将
数组中的值保持在
6842
以下,要么增加
np.eye
的形状以适应
array.max()
已解决!在创建np.eye()时,我只需要将+1添加到类的总数中,因为如果有6842个类,则获取6842个it错误,我只需要将一个添加到类:。
np.eye(array_classes + 1)[array]