如何找到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 答案中的解决方案在一维情况下工作正常。但是如果z2D像 -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))]))


以上是如何找到numpy数组中元素之间的距离?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>