如何根据用户定义的标准合并4列

时间:2016-01-27 19:14:43

标签: python

我需要将一个数组的4列合并为一列

array([[0, 0, 0, 1],
       [1, 0, 0, 0],
       ..., 
       [0, 1, 0, 0]])

结果应为:

array([3, 0, ..., 1])

特别是,我希望为那些值为1的列获取列索引(从0开始,以3结尾)。

2 个答案:

答案 0 :(得分:1)

基于每行只包含一个' 1'值,只有零和1。

编辑:出于某种原因,我在试图澄清问题时失去了与numpy的联系。如果使用numpy,这将无效,但我会留下它,以防你只是在寻找带有列表的东西。

a = [[0, 0, 0, 1],
    [1, 0, 0, 0],
    [1, 0, 0, 0],
    [0, 1, 0, 0]]

# One way
single_list = []
for x in a:
    single_list.append(x.index(1))

# or        
using_list_comprehension = [x.index(1) for x in a]

答案 1 :(得分:0)

如果每一行都有一个唯一的行,则以下内容将起作用:

 np.where(a == 1)[1]

例如:

>>> a = np.array([[0, 0, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0]])
>>> np.where(a == 1)[1]
array([3, 0, 1])

我们可以从以下方面看到它:

>>> np.where(a == 1)
(array([0, 1, 2]), array([3, 0, 1]))

array([0, 1, 2])是具有一个值的行索引,array([3, 0, 1]是列索引。这意味着我们在坐标(0, 3), (1, 0), (2, 1)处有一个值。因为每一行都有一个唯一的值1,所以每行都会有一个列索引。