Вот пример того, как проверить, содержат ли противоположные диагонали только 1
с, как в вашем случае:
In [52]: from scipy.sparse import eye
давайте создадим матрицу с противоположной диагонали
In [53]: a = np.fliplr(eye(5, 8, k=1).toarray())
In [54]: a
Out[54]:
array([[ 0., 0., 0., 0., 0., 0., 1., 0.],
[ 0., 0., 0., 0., 0., 1., 0., 0.],
[ 0., 0., 0., 0., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0.]])
Флип массива в влево/вправо
In [55]: f = np.fliplr(a)
In [56]: f
Out[56]:
array([[ 0., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 0., 0.]])
То же самое можно сделать:
In [71]: a[::-1,:]
Out[71]:
array([[ 0., 0., 1., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 1., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 0.]])
получить данные диагональную
In [57]: np.diag(f, k=1)
Out[57]: array([ 1., 1., 1., 1., 1.])
In [58]: np.diag(f, k=-1)
Out[58]: array([ 0., 0., 0., 0.])
In [111]: a[::-1].diagonal(2)
Out[111]: array([ 1., 1., 1., 1., 1.])
проверить содержит ли вся диагональ 1
s
In [61]: np.all(np.diag(f, k=1) == 1)
Out[61]: True
или
In [64]: (np.diag(f, k=1) == 1).all()
Out[64]: True
In [65]: (np.diag(f, k=0) == 1).all()
Out[65]: False
This answer поможет вам найти все диагонали s
PS я новичок в NumPy, поэтому я уверен, что там должно быть быстрее и более элегантные решения
Я не знаю, если 'NumPy' имеет аккуратную функцию для этого, но вы могли бы всегда петля над строками, а затем цикл над столбцами и проверить, является ли элемент 'i'th в строке' j'th равным элементу в строке 'i + 1'th и' j-1'th. Очевидно, убедитесь, что вы ввели гарантии для диапазона индексов. – Petar
Кроме того, когда вы говорите, что хотите * отслеживать/обнаруживать * эту тенденцию, что вы имеете в виду? Что вы хотите с этим делать? – Petar
@PPG Я попробовал метод, подобный тому, что вы описали. Проблема в том, что переход от A1 к A2 идет вперед во времени, так что это не обязательно известно при попытке предсказать P1. Это исторические данные. Я попытался создать базу данных для поиска, но это должно было быть настолько большим, что оно приближалось и приближалось к 50% вероятности 0 или 1. Я хочу взять первые 15 чисел и определить, будет ли 16-й будет 0 или 1. – paperstsoap