我有一个unmpy数组,希望提取数组中的一些行。我的数组有三列,分别是x、y和z坐标:
sr_y=np.array([[10., 1., 8.], [20., 1., 8.1], [30., 1., 7.9], [10., 2., 8.],\
[20., 2., 7.9], [30., 2., 8.], [10., 1., 1.9], [20., 1., 2.],\
[10., 2., 2.1], [20., 2., 2.2], [30., 2., 1.8]])
数组被排序为1。第二列中具有相同值的行就是此类子集。sr_y
的前三行在第二列中具有相同的值,因此我想要最后一行([30., 1., 7.9]
)。然后,第4行、第5行和第6行构成下一个子集,我想要最后一行(第6行)。然后,从第6行到第7行,第三列变化很大(从8
到1.9
)。从这里到结尾,我想提取每个子集的第一行。第7行和第8行是一个子集,我想要第7行。从第9行、第10行和第11行,我想要第一行(第9行)。简单地说,我想介绍以下阵列:
np.array([[30., 1., 7.9], [30., 2., 8.], [10., 1., 1.9], [10., 2., 2.1]])
我尝试了以下代码,但它没有提供我想要的:
exported_data=np.array([])
for i in range (len(sr_y)-1):
if sr_y[i,1] != sr_y[i+1,1] or sr_y[i-1,2]>int (sr_y[i,2]+4):
aa=sr_y[i]
exported_data=np.append (exported_data,aa)
exported_data=exported_data.reshape(-1,3)
事实上,在第三列发生较大变化后,它无法修改导出的作用。在那个大的改变之后,我想导出每个子集的第一行。提前,谢谢你的帮助。我非常感谢你的贡献
您可以使用一个标志来指示是否已经发生了大步
第一个条件将捕获大步(
before
)之前所有子集的最后一个值(>
check)。第二个条件处理标志开关。而第三个也是最后一个条件捕获大步(not before
)之后所有子集的第一个值(>
check)注意:相应地用
list.append()
替换print()
调用。重要的是,条件保持在这个顺序。由于在出现大集合的迭代中,它必须捕获前一个子集的最后一个值和下一个子集的第一个值相关问题 更多 >
编程相关推荐