Oczekiwano, że np.fromfunction(lambda i: 1, (4,), dtype=int)
zwróci array([1, 1, 1, 1])
, ale zamiast tego zwróci liczbę całkowitą 1
. Czy ktoś może mi wytłumaczyć, dlaczego numpy.fromfunction zachowuje się w ten sposób? Wydaje się, że ma to coś wspólnego z definicją funkcji anonimowej (tj. Czy faktycznie użyto parametru funkcji).Nieoczekiwany wynik - numpy fromfunction ze stałymi funkcjami
>>> import numpy as np
>>> np.fromfunction(lambda i: i, (4,), dtype=int)
array([0, 1, 2, 3])
>>> np.fromfunction(lambda i: 1, (4,), dtype=int)
1
>>> np.fromfunction(lambda i: 1 + i*0, (4,), dtype=int)
array([1, 1, 1, 1])
EDYCJA: aby wyjaśnić, moim ostatecznym celem nie jest stworzenie array([1, 1, 1, 1])
przy użyciu tej metody. Raczej Robię wezwanie postaci
np.fromfunction(lambda i: **an expression that doesn't depend on i**, (n,))
Innymi słowy, próbuję zainicjować tablicę numpy poprzez wielokrotne wykonanie połączenia do niektórych funkcji. (Jest to wezwanie do np.random.random() w tej funkcji, więc nie robię nadmiarowych połączeń).
Jeśli wyrażenie nie zależy od 'i', podejrzewam, że można zastąpić użycie' a = np.fromfunction (lambda i: ** wyrażenie, które nie zależy od i **, (n,)) 'z czymś takim jak' a = ** wyrażenie, które nie zależy od i ** ', aw wyrażeniu użyj czegoś takiego jak' np.ones (n) ',' np.arange (n) ', itp., aby wyrażenie tworzyło tablicę o odpowiednim rozmiarze. –
@WarrenWeckesser Nie jestem pewien, czy rozumiem. Czy twoja metoda zadziała, nawet jeśli jest wywołanie 'np.random.random()' wewnątrz '** wyrażenie, które nie zależy od i **'? –
Możesz użyć argumentu 'size' z' np.random.random'. Jeśli twoje wyrażenie to, powiedzmy, "4 * u ** 2 + 1", gdzie 'u' jest przypadkowe, możesz napisać' a = 4 * np.random.losowy (rozmiar = n) ** 2 + 1'. –