【发布时间】:2020-05-04 23:26:21
【问题描述】:
我想合并某些数值接近的值。
在此示例中,我将合并任何可以通过差值小于 2 的相邻值连接的内容。
import numpy as np
a = np.arange(10)
a = np.delete(a, (3, 7))
matrix = np.abs(a.reshape(-1,1) - a)
matrix < 2
array([[ True, True, False, False, False, False, False, False],
[ True, True, True, False, False, False, False, False],
[False, True, True, False, False, False, False, False],
[False, False, False, True, True, False, False, False],
[False, False, False, True, True, True, False, False],
[False, False, False, False, True, True, False, False],
[False, False, False, False, False, False, True, True],
[False, False, False, False, False, False, True, True]])
从左上角开始:
- 首先水平移动以找到最后一个真值。
- 然后向下寻找最后一个真值。
- 重复两次,直到找到正方形。
- 无法对角连接 True 值。
这将为您提供从 [0,2] 到 [2,2] 的第一个正方形。
这个例子的期望输出是:
[[0, 2], [3, 5], [6, 7]]
其中的值表示正方形的开始和结束。有什么好的方法吗?
如果可能的话,我宁愿不要循环。
【问题讨论】:
标签: python numpy scipy boolean