如何修复onehot编码中的“索引3超出大小为3的轴1的界限”?

2024-03-28 17:46:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用python编写一个热编码。但是当我运行一个热编码时会出现一些问题

def one_hot_encode(labels):
    n_labels = len(labels)
    n_unique_labels = len(np.unique(labels))
    one_hot_encode = np.zeros((n_labels,n_unique_labels))
    one_hot_encode[np.arange(n_labels), labels] = 1
    return one_hot_encode

这就是我过去运行一个热端代码的方法

数据是这样的。。。在

[3 3 3 3 3 2 2 2 2 2 1 1 1 1 1]

发生这种错误

"index 3 is out of bounds for axis 1 with size 3"

我尝试另一条路。。。在

更改代码部分

^{pr2}$

这是运行中,但它不是3类。。。 结果是这样的

array([[0., 0., 0., 1.],
   [0., 0., 0., 1.],
   [0., 0., 0., 1.],
   [0., 0., 0., 1.],
   [0., 0., 0., 1.],
   [0., 0., 1., 0.],
   [0., 0., 1., 0.],
   [0., 0., 1., 0.],
   [0., 0., 1., 0.],
   [0., 0., 1., 0.],
   [0., 1., 0., 0.],
   [0., 1., 0., 0.],
   [0., 1., 0., 0.],
   [0., 1., 0., 0.],
   [0., 1., 0., 0.]])

我如何解决这个问题?在


Tags: 代码编码labelslenreturndefnpzeros
1条回答
网友
1楼 · 发布于 2024-03-28 17:46:55

错误从[3 3 3 3 3 2 2 2 2 2 1 1 1 1 1]引发。您的映射np.array中有3个,这意味着在某个位置您试图等于index 3 to 1,但问题是映射数组中的最大索引是2。在

def one_hot_encode(labels):
    n_labels = len(labels) # this will give 15
    n_unique_labels = len(np.unique(labels)) # this will give 3
    one_hot_encode = np.zeros((n_labels,n_unique_labels)) # will create 15x3 matrix
    one_hot_encode[np.arange(n_labels), labels] = 1 # error here you try to map index 3 to 1 which does not exist
    return one_hot_encode

只需将映射数组从[3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1]更改为[2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]

相关问题 更多 >