在 2D numpy 数组中加入近端段的 Pythonic 方法?

标签 python arrays numpy

我有一个二维 numpy 数组,它将分段时间段表示为开始/结束时间。我设计了一种在片段接近时(小于某个最小间隙长度)连接片段的方法:

def join_proximal_segments(original_segments, min_gap):

  begins = np.array([original_segments.T[0, 0]])
  ends = np.array([])

  for i in np.arange(len(original_segments)-1):

    if((original_segments.T[0, i+1] - original_segments.T[1, i]) > min_gap):

      begins = np.append(begins, original_segments.T[1, i])
      ends = np.append(ends, original_segments.T[0, i+1])

  ends = np.append(ends, original_segments.T[1, -1])

  joined_segments = np.array([begins, ends]).T

  return joined_segments

看起来很不优雅。有没有更直接的方法使用 numpy 来解决这个问题?

编辑:示例数组

detections = np.array([[2, 60],[62, 78],[97, 105],[255, 340],[343, 347]])

最佳答案

我不确定我是否完全理解您的问题,但我希望这个示例足以帮助您找出问题的向量化:

import numpy as np

min_gap = 10
original_segments = np.array([[  2,  60],
                              [ 62,  78],
                              [ 97, 105],
                              [255, 340],
                              [343, 347]])


def join_proximal_segments(original_segments, min_gap):
    diff = original_segments[1:, 0] - original_segments[:-1, 1]
    diff_bool = diff > min_gap

    joined_segments = np.empty((sum(diff_bool)+1, 2),
                                 dtype=original_segments.dtype)
    # beginnings
    joined_segments[0, 0] = original_segments[0, 0]
    joined_segments[1:, 0] = original_segments[:-1, 1][diff_bool]
    # ends
    joined_segments[:-1, 1] = original_segments[1:, 0][diff_bool]
    joined_segments[-1, 1] = original_segments[-1, 1]

    return joined_segments


print(join_proximal_segments(original_segments, min_gap))
# [[  2  97]
#  [ 78 255]
#  [105 347]]

关于在 2D numpy 数组中加入近端段的 Pythonic 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59995473/

相关文章:

python - Ctrl+L 不会清除 Python3.3 终端

c - 将数组从 C 传递到 nasm 时出现段错误

javascript - 深克隆和浅克隆有什么区别?

python - 特殊过滤器 pandas dataframe

python - PyEphem 能否用于计算任何对象的设置和上升时间?

python - 使用 Pandas 进行基本矩阵计算

PHP in_array() 总是返回 false

python - 有没有办法提高在 Windows 下使用 Fortran 中数组的速度,比如 Python numpy?

python - 从 DataFrame 中的其他列创建列时出现 ValueError 异常

python - 找不到我的 Python 3.3 语法错误