Verschil tussen import numpy en import numpy als np

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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes