【问题标题】:Python 2D Numpy Array to 1D (sort of..) [duplicate]Python 2D Numpy Array 到 1D(有点..)[重复]
【发布时间】:2018-05-31 01:40:24
【问题描述】:

简单的问题,我想得到一个 1D numpy 数组。

给定一个二维数组,其中每行包含一个“1”值,如何将其转换为一维数组,由二维数组中“1”的列索引组成

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

[2 2 1 1 1 1 0]

我将如何在 python 中做到这一点? 我不知道它的术语,请告诉我这种转换的正确术语。

【问题讨论】:

  • 寻找numpy.argmax

标签: python arrays numpy transformation encoder


【解决方案1】:

您正在寻找沿第一个轴具有最大值的索引:

>>> a.argmax(axis=1)
array([2, 2, 2, 1, 1, 1, 1, 0])

a.argmax(axis=None, out=None)

沿给定轴返回最大值的索引。

如果其他值不一定小于 1,请先过滤 1。 这给出了 TrueFalse 值的数组。现在,使用argmax()

>>> (a == 1).argmax(axis=1)
array([2, 2, 2, 1, 1, 1, 1, 0])

True 类似于1False 类似于0,因为bool 继承自int

【讨论】:

    【解决方案2】:

    似乎您想为每一行获取一个热编码向量的热索引。

    这可以按如下方式完成:

    1. 将矩阵乘以向量[0 1 2],或更通用的:numpy.arange(matrix.shape[1])
    2. 总结你的矩阵行:numpy.sum(matrix, axis=1)

    numpy 数组也有函数argmax,这会导致相同的结果。

    【讨论】:

      【解决方案3】:

      您可以使用 numpy argmax 来执行此操作,如下所示:

      a=np.array([[ 0,  0,  1],[ 0,  0,  1], [ 0,  0,  1],[ 0,  1,  0],[ 0,  1,  0],[ 0,  1,  0],[ 1,0,0]])
      a.argmax(1)
      array([2, 2, 2, 1, 1, 1, 0])
      

      【讨论】:

        猜你喜欢
        • 2020-12-11
        • 2022-01-18
        • 2021-02-25
        • 2018-08-25
        • 2018-03-20
        • 1970-01-01
        • 2021-05-05
        • 2017-11-08
        相关资源
        最近更新 更多