более симпатичное подход, который не может выполнить хорошо, но работает для любого DTYPE, является использование as_strided
:
In [2]: from numpy.lib.stride_tricks import as_strided
In [3]: may_a = numpy.array([False, True, False, True, True, False,
...: True, False, True, True, False])
In [4]: may_b = numpy.array([False,True,True,False])
In [5]: a = len(may_a)
In [6]: b = len(may_b)
In [7]: a_view = as_strided(may_a, shape=(a - b + 1, b),
...: strides=(may_a.dtype.itemsize,) * 2)
In [8]: a_view
Out[8]:
array([[False, True, False, True],
[ True, False, True, True],
[False, True, True, False],
[ True, True, False, True],
[ True, False, True, False],
[False, True, False, True],
[ True, False, True, True],
[False, True, True, False]], dtype=bool)
In [9]: numpy.where(numpy.all(a_view == may_b, axis=1))[0]
Out[9]: array([2, 7])
Вы должны быть осторожны, потому что даже если a_view
вид данных may_a
«s, при сравнении его с may_b
временный массив (a - b + 1) * b
создается, что может быть проблемой ш с большими a
s и b
s.
Вы имели в виду 'out_index = [2,6]'? –
@ Konfle Dolex, out_index = [2,7] – Olga
@Olga Ah. Я неправильно понял ваш вопрос. –