【发布时间】:2018-05-02 00:43:12
【问题描述】:
我有一个一维 numpy 数组。此数组中两个后续值之间的差值要么是 1,要么大于 1。我想为每次出现差异大于一的情况将数组切割成部分。因此:
arr = numpy.array([77, 78, 79, 80, 90, 91, 92, 100, 101, 102, 103, 104])
应该变成
[array([77, 78, 79, 80]), array([90, 91, 92]), array([100, 101, 102, 103, 104])]
我有以下代码可以解决问题,但我觉得我在这里很复杂。必须有更好/更蟒蛇的方式。谁有更优雅的方法?
import numpy
def split(arr, cut_idxs):
empty_arr = []
for idx in range(-1, cut_idxs.shape[0]):
if idx == -1:
l, r = 0, cut_idxs[0]
elif (idx != -1) and (idx != cut_idxs.shape[0] - 1):
l, r = cut_idxs[idx] + 1, cut_idxs[idx + 1]
elif idx == cut_idxs.shape[0] - 1:
l, r = cut_idxs[-1] + 1, arr.shape[0]
empty_arr.append(arr[l:r + 1])
return empty_arr
arr = numpy.array([77, 78, 79, 80, 90, 91, 92, 100, 101, 102, 103, 104])
cuts = numpy.where(numpy.ediff1d(arr) > 2)[0]
print split(arr, cuts)
【问题讨论】:
标签: python arrays numpy optimization