Python 2D Numpy数组到1D(排序..)[重复]

问题描述 投票:3回答:3

这个问题在这里已有答案:

简单的问题,我想获得1D numpy数组。

给定一个2D数组,其中每行包含一个'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中做到这一点?我不知道它的术语,让我知道这种转换的正确术语。

python arrays numpy transformation encoder
3个回答
5
投票

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

>>> 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])

True1一样充当​​False0,因为bool继承自int


0
投票

好像你想获得每行一个热编码矢量的热索引。

这可以按如下方式完成:

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

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


0
投票

您可以使用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])
© www.soinside.com 2019 - 2024. All rights reserved.