Как рассчитать количество «непрерывных» повторов в массиве в python? - PullRequest
0 голосов
/ 30 января 2019

У меня есть массив из 0,1 пустышек, подобный этому:

 [0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0]

Я хочу иметь функцию, которая сообщает мне, что число 1 повторяется 3,2,4 раз в этом массиве, соответственно.Для этого есть простая функция numpy?

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Это один из способов найти сначала кластеры, а затем получить их частоту, используя Counter.Первая часть основана на этом ответе для 2d массивов.Я добавил вторую Counter часть, чтобы получить желаемый ответ.

Если вам сочтен полезным исходный ответ, перейдите на него и подпишите его.

from scipy.ndimage import measurements
from collections import Counter

arr = np.array([0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0])

cluster, freq = measurements.label(arr)

print (list(Counter(cluster).values())[1:])
# [3, 2, 4]
0 голосов
/ 30 января 2019

Пользовательская реализация?

def count_consecutives(predicate, iterable):
  tmp = []
  for e in iterable:
    if predicate(e): tmp.append(e)
    else:
      if len(tmp) > 0: yield(len(tmp)) # > 1 if you want at least two consecutive
      tmp = []
  if len(tmp) > 0: yield(len(tmp)) # > 1 if you want at least two consecutive

Так что вы можете:

array = [0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0]
(count_consecutives(lambda x: x == 0, array)
#=> [3, 2, 4]

А также:

array = [0,0,0,1,2,3,0,0,3,2,1,0,0,1,11,10,10,0,0,100]
count_consecutives(lambda x: x > 1, array)
# => [2, 2, 3, 1]
0 голосов
/ 30 января 2019

Предположим, у вас есть только 0 и 1:

import numpy as np
a = np.array([0,0,0,1,1,1,0,0,1,1,0,0,0,1,1,1,1,0,0,0])

# pad a with 0 at both sides for edge cases when a starts or ends with 1
d = np.diff(np.pad(a, pad_width=1, mode='constant'))
# subtract indices when value changes from 0 to 1 from indices where value changes from 1 to 0
np.flatnonzero(d == -1) - np.flatnonzero(d == 1)
# array([3, 2, 4])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...