Нахождение последовательного и идентичного целого числа в векторе - PullRequest
0 голосов
/ 02 октября 2019

У меня есть векторы с 0 и 1.

a = np.array([1,1,0,0])
b = np.array([1,0,0,1])
c = np.array([0 1 1 0])
d = np.array([0 1 0 1])

Я хотел бы реализовать функцию проверки, если 1 являются последовательными в векторе, игнорируя конец вектора, т.е. последний элемент с первым элементом,Ожидаемые результаты будут:

check(a) --> True
check(b) --> True
check(c) --> True
check(d) --> False

Простым решением будет прокрутить каждый вектор. Однако я чувствую, что легче и умнее выполнимо с некоторой комбинацией np.diff или np.nonzero. Есть идеи?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вы можете использовать np.roll + np.logical_and + np.count_nonzero

import numpy as np


def check(arr):
    return np.count_nonzero(np.logical_and(np.roll(arr, 1), arr)) > 0


a = np.array([1, 1, 0, 0])
b = np.array([1, 0, 0, 1])
c = np.array([0, 1, 1, 0])
d = np.array([0, 1, 0, 1])

print(check(a))
print(check(b))
print(check(c))
print(check(d))

Выход

True
True
True
False
0 голосов
/ 02 октября 2019

Может быть, вы можете попробовать что-то вроде этого,

def check(k):
    return any( i in np.diff(np.where(k==1)) for i in [1, len(k)-1])

np.where(k==1), это вернет список индексов, где ваш вектор равен 1.

np.diff(np.where(k==1)), это обнулитсяразница между последовательными индексами, где ваш вектор равен 1.

Наконец any( i in np.diff(np.where(k==1)) for i in [1, len(k)-1]) это проверит, есть ли последовательные 1. Либо если их разность равна 1, либо длина вашего вектора - 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...