gpt4 book ai didi

python - 如何找到numpy数组中元素之间的距离?

转载 作者:行者123 更新时间:2023-12-03 23:26:16 57 4
gpt4 key购买 nike

例如,我有这样的数组 z :array([1, 0, 1, 0, 0, 0, 1, 0, 0, 1])如何找到两个连续 1 之间的距离在这个数组中? (以 0 秒的数量衡量)
例如,在 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))]))

关于python - 如何找到numpy数组中元素之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65873043/

57 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com