Ik begrijp dat men indien mogelijk
. moet gebruiken
import numpy as np
Dit helpt elk conflict als gevolg van naamruimten te voorkomen. Maar ik heb gemerkt dat hoewel het onderstaande commando werkt
import numpy.f2py as myf2py
het volgende niet
import numpy as np
np.f2py #throws no module named f2py
Kan iemand dit alsjeblieft uitleggen?
Antwoord 1, autoriteit 100%
numpy is de bovenste pakketnaam, en door import numpy
te doen, wordt de submodule numpy.f2py
niet geïmporteerd.
Als je import numpy
, wordt er een link gemaakt die verwijst naar numpy
, maar numpy
is niet verder gekoppeld aan f2py
. De link wordt tot stand gebracht wanneer u import numpy.f2py
In je bovenstaande code:
import numpy as np # np is an alias pointing to numpy, but at this point numpy is not linked to numpy.f2py
import numpy.f2py as myf2py # this command makes numpy link to numpy.f2py. myf2py is another alias pointing to numpy.f2py as well
Hier is het verschil tussen import numpy.f2py
en import numpy.f2py as myf2py
:
import numpy.f2py
- zet numpy in de lokale symbooltabel (wijst naar numpy), en numpy is gekoppeld aan numpy.f2py
- zowel numpy als numpy.f2py zijn toegankelijk
import numpy.f2py as myf2py
- zet my2py in de lokale symbooltabel (wijzend naar numpy.f2py)
- De bovenliggende numpy wordt niet toegevoegd aan de lokale symbooltabel. Daarom heb je geen directe toegang tot numpy
Antwoord 2, autoriteit 82%
De syntaxis import as
is geïntroduceerd in PEP 221 en is daar goed gedocumenteerd.
Als je een module importeert via
import numpy
het numpy-pakket is gebonden aan de lokale variabele numpy
. Met de syntaxis import as
kunt u de import eenvoudig binden aan de lokale variabelenaam van uw keuze (meestal om naambotsingen te voorkomen, uitgebreide modulenamen in te korten of toegang tot modules te standaardiseren met compatibele API’s).
Dus,
import numpy as np
is gelijk aan,
import numpy
np = numpy
del numpy
Als je dit mechanisme probeert te begrijpen, is het de moeite waard om te onthouden dat import numpy
eigenlijk betekent import numpy as numpy
.
Bij het importeren van een submodule, moet u verwijzen naar de volledige naam van de bovenliggende module, aangezien de importmechanismen op een hoger niveau plaatsvinden dan het lokale variabele bereik. d.w.z.
import numpy as np
import numpy.f2py # OK
import np.f2py # ImportError
Ik ben het ook oneens met uw bewering dat “waar mogelijk men [numpy als np moet importeren]”. Dit wordt gedaan om historische redenen, vooral omdat mensen het snel beu worden om elke bewerking vooraf te laten gaan aan numpy
. Het heeft voor mij nooit een naambotsing voorkomen (luiheid van programmeurs suggereert eigenlijk dat er een grotere kans is op het veroorzaken van een botsing met np
)
Tot slot, om mijn uiteenzetting af te ronden, zijn hier 2 interessante toepassingen van het import as
-mechanisme waarvan u op de hoogte moet zijn:
1. lange subimports
import scipy.ndimage.interpolation as warp
warp.affine_transform(I, ...)
2. compatibele API’s
try:
import pyfftw.interfaces.numpy_fft as fft
except:
import numpy.fft as fft
# call fft.ifft(If) with fftw or the numpy fallback under a common name
Antwoord 3, autoriteit 9%
Dit is een taalfunctie. f2py
is een subpakket van de module numpy
en moet apart worden geladen.
Deze functie maakt het volgende mogelijk:
- u laadt van
numpy
alleen de pakketten die u nodig heeft, wat de uitvoering versnelt. - de ontwikkelaars van
f2py
om naamruimte te scheiden van de ontwikkelaars van een ander subpakket.
Merk echter op dat import numpy.f2py
of zijn variant import numpy.f2py as myf2py
nog steeds de bovenliggende module numpy
laadt.
Zei dat, als je rent
import numpy as np
np.f2py
U ontvangt een AttributeError
omdat f2py
geen kenmerk is van numpy
, omdat de __init__()
van het pakket numpy
heeft in zijn scope niets gedeclareerd over het subpakket f2py
.
Antwoord 4, autoriteit 5%
numpy.f2py
is eigenlijk een submodule van numpy
en moet daarom apart van numpy worden geïmporteerd. Zoals aha al eerder zei:
Als je numpy importeert, wordt er een link gemaakt die naar numpy verwijst, maar
numpy is niet verder gekoppeld aan f2py. De link wordt tot stand gebracht wanneer u
importeer numpy.f2py
wanneer u de instructie import numpy as np
aanroept, verkort u de zin “numpy” tot “np” om uw code leesbaarder te maken. Het helpt ook om naamruimteproblemen te voorkomen. (tkinter en ttk zijn een goed voorbeeld van wat er kan gebeuren als je dat probleem wel hebt. De gebruikersinterfaces zien er heel anders uit.)
Antwoord 5, autoriteit 5%
Nou, nogal een oud bericht, maar hier zijn mijn 2 centen op de uitleg van anderen.
numpy (verwijs git repository) pakket heeft verschillende subpakketten, f2py is een van hen, andere zijn als core, ma etc
Als je de init.py in het numpy-pakket verwijst, heeft het imports zoals –
from . import core etc
maar het heeft geen import voor het f2py-subpakket.
Dat is de reden dat een uitspraak als
import numpy as np
np.f2py
werkt niet, maar
import numpy as np
np.core
zal werken.