Mam numpy.array
s gdzie kolumny zawierają różne typy danych, a kolumny powinny również mieć przypisane do nich różne funkcje. Mam również funkcje w tablicy.Numpy: Zastosuj tablicę funkcji do tej samej długości tablicy 2d, jak gdyby pomnożono elementwise? (przy użyciu funkcji Pythona jako operatora?)
Powiedzmy:
a = array([[ 1, 2.0, "three"],
[ 4, 5.0, "six" ]], dtype=object)
functions_arr = array([act_on_int, act_on_float, act_on_str])
pewnością mogę myśleć sposobów, aby to zrobić poprzez podzielenie rzeczy, ale jedna rzecz, która wydaje się najbardziej naturalne, aby mi to myśleć o nim jako mnożenie elementwise z nadawania, i funkcje jako operatorzy. Więc chciałbym zrobić coś takiego
functions_arr*a
i uzyskać efekt
array([[act_on_int(1), act_on_float(2.0), act_on_str("three")],
[act_on_int(4), act_on_float(5.0), act_on_str("six") ]])
Czy znasz sposób, aby osiągnąć coś w tym kierunku?
Edit: Zmieniłem definicji tablicy w kwestii zawierać dtype=[object]
jak ludzie wskazał, to jest ważne dla tablica do przechowywania Rodzaje sposób zamierzałem.
Dziękuję za odpowiedzi i komentarze! Przyjąłem odpowiedź senderles i czuję, że jest to bardzo zbliżone do tego, co miałem na myśli.
Ponieważ nie wydaje się być pewne zamieszanie o tym, jak uważam operację być jak mnożenie, pozwól mi wyjaśnić, że z innym przykład:
Jak jesteś w pełni świadoma, operacja jak:
v = array([1,2,3])
u = array([[5,7,11],
[13,17,19]])
v*u
będzie nadawać v
nad rzędami u
i daje
array([[ 1*5, 2*7, 3*11],
[1*13, 2*17, 3*19]])
tj
array([[ 5, 14, 33],
[13, 34, 57]])
Gdybyśmy teraz mieli zastąpić v
z na przykład del operator musielibyśmy (po to nie rzeczywiście działa kodu Pythona :)
V = array([(d/dx),(d/dy),(d/dz)])
u = array([[5,7,11],
[13,17,19]])
V*u
otrzymując (w duchu)
array([[(d/dx)5, (d/dy)7, (d/dz)11]],
[(d/dx)13,(d/dy)17,(d/dz)19]])
Przyznaję, że przyjęcie pochodnej kilku stałych nie byłoby najbardziej Ciekawe operacje, więc możesz zastąpić u
pewnym symbolicznym wyrażeniem matematycznym w x
, y
i z
. W każdym razie mam nadzieję, że to przynajmniej bardziej wyjaśnia zarówno moje rozumowanie, jak i nieco o "(używając funkcji Pythona jako operatora?)" W tytule.
nie sądzę, to jest odpowiedź na pytanie. OP zapytał, jak uzyskać nadawanie w tej sytuacji. Ten kod nie transmituje. –