mam szereg obiektów numpy zawierającej kilka listy indeksów:Dlaczego funkcja wektoryzacji numpy najwyraźniej nazywa się dodatkowym czasem?
>>> idxLsts = np.array([[1], [0, 2]], dtype=object)
zdefiniować zwektoryzowany funkcji dodać wartość do każdej listy:
>>> idx = 99
>>> f = np.vectorize(lambda idxLst: idxLst.append(idx))
Przyzywam funkcję. Nie dbam o wartość zwrotu, tylko efekt uboczny.
>>> f(idxLsts)
array([None, None], dtype=object)
Indeks 99 został dodany dwukrotnie do pierwszej listy. Czemu? Jestem zdumiony.
>>> idxLsts
array([[1, 99, 99], [0, 2, 99]], dtype=object)
Przy innych wartościach idxLsts, że nie nastąpi to:
>>> idxLsts = np.array([[1, 2], [0, 2, 4]], dtype=object)
>>> f(idxLsts)
array([None, None], dtype=object)
>>> idxLsts
array([[1, 2, 99], [0, 2, 4, 99]], dtype=object)
Moje podejrzenie jest to związane z dokumentacją, która mówi: „Definiowanie vectorized funkcję, która pobiera zagnieżdżony sekwencja obiektów lub numpy tablic jako danych wejściowych i zwraca tablicę numpy jako wynik.Wizualizowana funkcja ocenia pyfunc nad kolejnymi krotkami tablic wejściowych, takich jak funkcja map Pythona, z tym wyjątkiem, że używa zasad transmisji numpy. "
a-moll przypis: Odkryłem, że choć docs powiedzieć, że to zachowanie „można uniknąć poprzez określenie' otypes' argumentu”dostarczanie' otypes' nie wyklucza podwójnego połączenia (przynajmniej w wersji 1.6.2). – senderle
@senderle: Dzięki. Nie mogłem również uniknąć podwójnego wywołania, z wyjątkiem określania 'otypes = '?', ** i **' f.nout = 1' ** i ** 'f.lastcallargs = 1', co wydaje się troszkę szalone :) – unutbu