Ein viel cooler Ansatz, der eine gut nicht durchführen kann, die aber für jeden dtype arbeitet, ist die Verwendung 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])
Sie müssen aber vorsichtig sein, denn obwohl a_view
eine Ansicht von may_a
‚s Daten vorhanden sind, wenn sie mit may_b
ein temporäres Array von (a - b + 1) * b
Vergleich geschaffen, die w ein Problem sein kann, ith large a
s und b
s.
Meintest du 'out_index = [2,6] '? –
@Konfle Dolex, out_index = [2,7] – Olga
@Olga Ah. Ich habe deine Frage falsch gelesen. –