如何找到numpy数组中元素之间的距离?
例如,我有这样的数组z:
array([1, 0, 1, 0, 0, 0, 1, 0, 0, 1])
如何1在此数组中找到两个连续s之间的距离?(以0s的数量衡量)
例如,在z数组中,这样的距离是:
[1, 3, 2]
我有这样的代码:
distances = []
prev_idx = 0
for idx, element in enumerate(z):
if element == 1:
distances.append(idx - prev_idx)
prev_idx = idx
distances = np.array(distances[1:]) - 1
这个操作可以在没有 for 循环的情况下完成吗?也许以更有效的方式完成?
UPD
@warped 答案中的解决方案在一维情况下工作正常。但是如果z会2D像 -array np.array([z, z])呢?
回答
您可以使用 np.where 来查找那些,然后使用 np.diff 来获取距离:
q=np.where(z==1)
np.diff(q[0])-1
出去:
array([1, 3, 2], dtype=int64)
编辑:
对于二维数组:
您可以使用具有 1 的位置的曼哈顿距离的最小值(减 1)来获得中间零的数量:
def manhattan_distance(a, b):
return np.abs(np.array(a) - np.array(b)).sum()
zeros_between = []
r, c = np.where(z==1)
coords = list(zip(r,c))
for i, c in enumerate(coords[:-1]):
zeros_between.append(
np.min([manhattan_distance(c, coords[j])-1 for j in range(i+1, len(coords))]))