【问题标题】:IndexError indexing a 2D array with a 1D array (NumPy)IndexError 用一维数组索引二维数组(NumPy)
【发布时间】:2017-07-19 19:30:57
【问题描述】:

我有一个 NumPy 标签数组:

labels = np.ndarray(10000, dtype=np.float32)

数组中的元素如下所示:

print(labels[1:5])
Output: [ 9.  9.  4.  1.]

我想将它们转换成一个热编码标签,我使用了以下代码:

one_hot_labels = np.eye(10)[labels]

我收到以下错误:

IndexError     Traceback (most recent call last)
<ipython-input-21-dccf85afc031> in <module>()
  1 
----> 2 s=np.eye(10)[labels]

IndexError: arrays used as indices must be of integer (or boolean) type

我该如何解决这个问题?

【问题讨论】:

  • 你确定标签和火车标签是一样的吗?
  • 您需要使用整数值作为索引:one_hot_labels=np.eye(10)[labels.astype(int)]
  • @JohanL 谢谢。它有效

标签: python numpy one-hot-encoding


【解决方案1】:

您已将标签定义为np.float32。如果它们被用作数组或矩阵的索引,它们必须是整数。要转换 np.float32 使用 .astype(int)

 one_hot_labels=np.eye(10)[labels.astype(int)]

或者直接将标签定义为整数:

labels=np.ndarray(10000,dtype=int)

【讨论】:

  • @Jayanth 如果他回答了您的问题,请接受答案。 :)
【解决方案2】:

如果labelsfloat 并且您不想更改它的dtype,您可以简单地使用MultiLabelBinarizer。这个 sn-p 应该可以完成工作:

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
one_hot_labels = mlb.fit_transform(labels[:, None])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 2019-07-28
    • 2020-07-30
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多