python如何根据条件创建数组

时间:2017-08-16 14:39:43

标签: python arrays numpy conditional

我想创建一个具有格式的数组,并且值来自另一个数组。我的输入数组由三列组成。我想在第一行创建一个数组,如果第二列相等,则从第三列创建所有值。因此,在此示例中,第二列中的前三个值相等,因此在新数组中,我想要新数组中每行的第三个值。

a = 
[[1,  1,  4],
[2,  1,  6],
[3,  1,  7],
[4,  2,  0],
[5,  2,  7],
[6,  3,  1]]

结果:

b = 
[[4, 6 , 7],
[0, 7],
[1]]

我试过了:

c = []    
x = 1
for row in a:
    if row[0] == x
        c.extend[row[2]]
    else:
        x = x + 1
        c.append(row[2])

但结果是所有第三个值的列表

3 个答案:

答案 0 :(得分:1)

a = np.asarray(a)
c = []
for i in range(a[-1,1]): #a[-1,1] is the maximum that will occur
    save = a[a[:,1]==i] # take all the ones that have i in the second entry
    c.append(save[:,2]) # of those add the last entry

重要的是,a为此转换为np.array

答案 1 :(得分:1)

以下内容适用于我:

import numpy as np

c = [[]]    
x = 1
for row in a:
    if row[1] == x:
        c[-1].append(row[2])
    else:
        x = x + 1
        c.append([row[2]])

c = np.asarray(c)

答案 2 :(得分:1)

如果第二列已排序,您可以使用np.diff查找值更改的索引,然后拆分:

np.split(a[:,2], np.flatnonzero(np.diff(a[:,1]) != 0)+1)
# [array([4, 6, 7]), array([0, 7]), array([1])]