Hier habe ich einen anderen Ansatz von Martijn ist einer folgen, postuliert er, dass Numpy/Pandas für die Antwort nicht relevant sind, wie ich mit dem Verständnis ausgehen, dass alles ein Numpy Array ...
Zuerst für Vorführzwecken schaffen wir eine Matrix von Zeichenketten, darunter diejenige, die wir nicht wollen, in Ihrer Probe
In [37]: toks = ['--', '-+', '+-', '-|', '|-', '->', '<-']
In [38]: matrix = np.array([[toks[np.random.randint(7)] for j in range(5)] for i in range(4)])
In [39]: matrix
Out[39]:
array([['|-', '--', '<-', '-|', '-|'],
['|-', '<-', '--', '+-', '--'],
['|-', '-+', '-+', '<-', '-+'],
['<-', '->', '->', '-|', '--']],
dtype='<U2')
nächsten zwei Vektor der Indizes
In [40]: A, B = np.array([2,3]), np.array([0,1,4])
und die richtige Sende Regel sie Indizierung matrix
In [41]: matrix[A[:,None],B]
Out[41]:
array([['|-', '-+', '-+'],
['<-', '->', '--']],
dtype='<U2')
und schließlich, ähnlich wie das anzuwenden, was in anderen Antworten vorgeschlagen wurde in den Kommentaren und vorgeschlagen
In [42]: np.all(matrix[A[:,None],B] == '->')
Out[42]: False
Ich möchte die matrix[A[:,None],B]
Linie betonen, das könnte so kommentiert werden "Schau ma ', keine loops" ;-)
In Bezug auf eine Funktion de finition (allgemeiner als Ihre)
def(m, a, b, tok):
return np.all(m[np.array(a)[:,None], np.array(b)] == tok)
zu beachten, dass die Funktion w/r Empfangen in a
b
und Sequenzen, die nicht elastisch ist Numpy Arrays sind.
Sie können die 'any' oder 'all' Funktionen zusammen mit Generatorausdrücken ausprobieren. Etwas wie 'all (c_matrix.loc() [a] [b] == '->' für ein in A für b in B) könnte funktionieren. – mkrieger1
Da 'c_matrix.loc()' nur ein Label-basierter Indexer ist, haben Sie versucht * einfach zu testen, ob '->' in Ihrem Frame * vorhanden ist? –
Versuchen Sie etwas wie 'all (c_matrix.loc() [a] [b] ==" -> "für a in A für b in B)' –