繁体   English   中英

Python:根据数组中的值拆分NumPy数组

[英]Python: Split NumPy array based on values in the array

我有一个大阵列:

[(1.0, 3.0, 1, 427338.4297000002, 4848489.4332)
 (1.0, 3.0, 2, 427344.7937000003, 4848482.0692)
 (1.0, 3.0, 3, 427346.4297000002, 4848472.7469) ...,
 (1.0, 1.0, 7084, 427345.2709999997, 4848796.592)
 (1.0, 1.0, 7085, 427352.9277999997, 4848790.9351)
 (1.0, 1.0, 7086, 427359.16060000006, 4848787.4332)]

我想根据数组中的第二个值(3.0,3.0,3.0 ...... 1.0,1.0,10)将此数组拆分为多个数组。

每次第二个值改变时,我想要一个新数组,所以基本上每个新数组都有相同的第二个值。 我已经在Stack Overflow上看了这个,并且知道了命令

np.split(array, number)

但我不是试图将数组拆分为一定数量的数组,而是将其拆分为一个值。 我怎样才能以上面指定的方式拆分数组? 任何帮助,将不胜感激!

您可以在第一列上使用numpy.wherenumpy.diff找到值不同的索引:

>>> arr = np.array([(1.0, 3.0, 1, 427338.4297000002, 4848489.4332),
 (1.0, 3.0, 2, 427344.7937000003, 4848482.0692),
 (1.0, 3.0, 3, 427346.4297000002, 4848472.7469),
 (1.0, 1.0, 7084, 427345.2709999997, 4848796.592),
 (1.0, 1.0, 7085, 427352.9277999997, 4848790.9351),
 (1.0, 1.0, 7086, 427359.16060000006, 4848787.4332)])
>>> np.split(arr, np.where(np.diff(arr[:,1]))[0]+1)
[array([[  1.00000000e+00,   3.00000000e+00,   1.00000000e+00,
          4.27338430e+05,   4.84848943e+06],
       [  1.00000000e+00,   3.00000000e+00,   2.00000000e+00,
          4.27344794e+05,   4.84848207e+06],
       [  1.00000000e+00,   3.00000000e+00,   3.00000000e+00,
          4.27346430e+05,   4.84847275e+06]]),
 array([[  1.00000000e+00,   1.00000000e+00,   7.08400000e+03,
          4.27345271e+05,   4.84879659e+06],
       [  1.00000000e+00,   1.00000000e+00,   7.08500000e+03,
          4.27352928e+05,   4.84879094e+06],
       [  1.00000000e+00,   1.00000000e+00,   7.08600000e+03,
          4.27359161e+05,   4.84878743e+06]])]

说明:

首先,我们将在第二列中获取项目:

>>> arr[:,1]
array([ 3.,  3.,  3.,  1.,  1.,  1.])

现在要找出项目实际更改的位置,我们可以使用numpy.diff

>>> np.diff(arr[:,1])
array([ 0.,  0., -2.,  0.,  0.])

任何非零的东西意味着它旁边的项目是不同的,我们可以使用numpy.where来查找非零项目的索引然后再加1,因为这样的项目的实际索引比返回的索引多一个:

>>> np.where(np.diff(arr[:,1]))[0]+1
array([3])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM