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

标签 python arrays numpy split

我有一个大数组:

[(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.where 找到值不同的索引和 numpy.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])

关于Python:根据数组中的值拆分 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863083/

相关文章:

python - 在 Python 2.7.3 中将字段名称分配给 numpy 数组

arrays - 二维数组中的单个元素的数学运算 - Swift

python - 需要返回协方差的 Python 多项式拟合函数

python - np.array == num 比较很慢吗?可以使用多处理来加速吗?

python - 将 numpy 数组与标量传递给函数会产生不一致的结果

javascript - Javascript 语言中是否存在类似 python 的占位符?

python - 如果Python中没有数据或空行,如何删除带下划线的字符串/名称

python - 通过 jupyter 笔记本运行远程内核

python - 具有单独训练集和验证集的 GridSearchCV 错误地还考虑了最终选择最佳模型的训练结果

javascript - 正则表达式从内容获取数组?