For example, I have such array `z`

:
`array([1, 0, 1, 0, 0, 0, 1, 0, 0, 1])`

How to find a distances between two successive `1`

s in this array? (measured in the numbers of `0`

s)

For example, in the `z`

array, such distances are:

[1, 3, 2]

I have such code for it:

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

Can this opeartion be done without for-loop and maybe in more efficient way?

**UPD**

The solution in the @warped answer works fine in 1-D case.
But what if `z`

will be `2D`

-array like `np.array([z, z])`

?

## Answer

You can use np.where to find the ones, and then np.diff to get the distances:

q=np.where(z==1) np.diff(q[0])-1

out:

array([1, 3, 2], dtype=int64)

### edit:

for 2d arrays:

You can use the minimum of the manhattan distance (decremented by 1) of the positions that have ones to get the number of zeros inbetween:

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))]))