Python 2D Numpy数组转换为1D数组(有点像排序..)

4

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

给定一个包含单个“1”值的每行的2D数组,如何将其转换为1D数组,其中包含2D数组中“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.]]

to

[2 2 1 1 1 1 0]

我该如何在Python中实现这个功能?我不知道相关术语,希望您能告诉我这种转换的正确术语。


1
寻找 numpy.argmax - Divakar
3个回答

6

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接