Python 2D Numpy数组到1D(有点......)

时间:2017-12-17 14:37:31

标签: python arrays numpy transformation encoder

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

给定一个2D数组,其中每行包含一个单独的' 1'如何将值转换为1D数组,由1' 1的列索引组成。在2D数组中

[[ 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中执行此操作? 我不知道它的术语,请让我知道这种转换的正确术语。

3 个答案:

答案 0 :(得分:5)

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

def check_list_size(list1):
    for lst in list1:
        if len(lst) != 1:
            return False
    return True
  

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

     

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

如果其他值不一定小于1,请首先过滤a.argmax(axis=None, out=None)。 这会给出一组1True值。现在,使用False

argmax()

>>> (a == 1).argmax(axis=1) array([2, 2, 2, 1, 1, 1, 1, 0]) 的行为与True1类似False,因为0继承自bool

答案 1 :(得分:0)

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

这可以按如下方式完成:

  1. 将矩阵与向量int或更通用的对象相乘:[0 1 2]
  2. 总结您的矩阵行:numpy.arange(matrix.shape[1])
  3. numpy数组也具有函数numpy.sum(matrix, axis=1),这导致相同的结果。

答案 2 :(得分: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])