我想创建一个具有格式的数组,并且值来自另一个数组。我的输入数组由三列组成。我想在第一行创建一个数组,如果第二列相等,则从第三列创建所有值。因此,在此示例中,第二列中的前三个值相等,因此在新数组中,我想要新数组中每行的第三个值。
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])
但结果是所有第三个值的列表
答案 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])]