Programim dhe zhvillim, javascript, python, php, html

Pse vargjet 0d në Numpy nuk konsiderohen skalar?

Me siguri një grup 0d është skalar, por Numpy nuk duket se mendon kështu... a më mungon diçka apo thjesht po e keqkuptoj konceptin?

>>> foo = numpy.array(1.11111111111, numpy.float64)
>>> numpy.ndim(foo)
0
>>> numpy.isscalar(foo)
False
>>> foo.item()
1.11111111111
21.04.2009

Përgjigjet:


1

Nuk duhet menduar shumë për këtë. Në fund të fundit është më mirë për shëndetin mendor dhe jetëgjatësinë e individit.

Situata kurioze me llojet skalare Numpy u mërzit nga fakti se nuk ka asnjë mënyrë të këndshme dhe të qëndrueshme për të degraduar matricën 1x1 në tipe skalar. Edhe pse matematikisht janë e njëjta gjë, ato trajtohen nga kode shumë të ndryshme.

Nëse keni bërë ndonjë sasi kodi shkencor, në fund të fundit do të dëshironit që gjëra të tilla si max(a) të funksionojnë në matrica të të gjitha madhësive, madje edhe skalarët. Matematikisht, kjo është një gjë krejtësisht e arsyeshme për të pritur. Megjithatë, për programuesit kjo do të thotë se çfarëdo që paraqet skalarët në Numpy duhet të ketë tiparet .formë dhe .ndim, kështu që të paktën ufunc-të nuk duhet të bëjnë kontroll të qartë të tipit në hyrjen e tij për 21 llojet e mundshme skalare në Numpy.

Nga ana tjetër, ata duhet të punojnë edhe me bibliotekat ekzistuese Python që bën bëjnë kontrolle të qarta të tipit në llojin skalar. Kjo është një dilemë, pasi një ndarray Numpy duhet të ndryshojë individualisht llojin e tij kur ato janë reduktuar në një shkallë, dhe nuk ka asnjë mënyrë për të ditur nëse kjo ka ndodhur pa kryer kontrolle në të gjithë aksesin. Në fakt, kalimi në atë rrugë ndoshta do ta bënte paksa qesharake të ngadaltë për të punuar me standardet e tipit skalar.

Zgjidhja e zhvilluesit Numpy është të trashëgojë nga skalarët ndarray dhe Python për llojin e vet skalar, në mënyrë që të gjithë skalarët të kenë gjithashtu .formë, .ndim, .T, etj etj. Matrica 1x1 do të jetë ende aty, por përdorimi i saj do të jetë i dekurajuar nëse e dini se do të keni të bëni me një skalar. Ndërsa kjo duhet të funksionojë mirë në teori, herë pas here ju mund të shihni ende disa vende ku nuk kanë munguar me rulin e bojës dhe të brendshmet e shëmtuara janë të ekspozuara për t'i parë të gjithë:

>>> from numpy import *
>>> a = array(1)
>>> b = int_(1)
>>> a.ndim
0
>>> b.ndim
0
>>> a[...]
array(1)
>>> a[()]
1
>>> b[...]
array(1)
>>> b[()]
1

Nuk ka asnjë arsye pse a[...] dhe a[()] duhet të kthejnë gjëra të ndryshme, por po. Ka propozime për ta ndryshuar këtë, por duket se kanë harruar të mbarojnë punën për vargjet 1x1.

Një çështje potencialisht më e madhe, dhe ndoshta e pazgjidhshme, është fakti që skalarët Numpy janë të pandryshueshëm. Prandaj, "spërkatja" e një skalari në një ndarray, matematikisht operacioni i përbashkët i kolapsit të një grupi në një skalar, është një PITA për t'u zbatuar. Në fakt nuk mund të rritet një skalar Numpy, ai nuk mund të hidhet në një ndarray, edhe pse newaxis funksionon në mënyrë misterioze mbi të:

>>> b[0,1,2,3] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'numpy.int32' object does not support item assignment
>>> b[newaxis]
array([1])

Në Matlab, rritja e madhësisë së një skalari është një operacion krejtësisht i pranueshëm dhe pa tru. Në Numpy ju duhet të ngjitni a = array(a) kudo ku mendoni se do të keni mundësinë të filloni me një skalar dhe të përfundoni me një grup. E kuptoj pse Numpy duhet të jetë në këtë mënyrë për të luajtur bukur me Python, por kjo nuk e ndryshon faktin që shumë ndërrues të rinj janë thellësisht të hutuar për këtë. Disa kanë kujtesë të qartë të luftimit me këtë sjellje dhe përfundimisht të këmbënguljes, ndërsa të tjerët që janë larguar shumë larg, përgjithësisht mbeten me një mbresë të thellë mendore pa formë që shpesh ndjek ëndrrat e tyre më të pafajshme. Është një situatë e shëmtuar për të gjithë.

27.04.2009
  • E keni menduar një karrierë në anën e shkrimit? 13.05.2012
  • Shumë prej tyre duket se janë mënyra matlab për të parë gjërat -Nuk mund të rritësh në fakt një skalar Numpy - as nuk mund të rritësh një np.array. Të qenit i qartë për madhësitë e bën sjelljen aksidentale O(N^2) më të vështirë. si përkufizim nuk mund të hidhet në një ndarray - kjo është ajo që bën np.asarray(scalar). matrica 1x1... - të menduarit e gjërave në thelb 2D, ose si matrica, nuk është e dobishme këtu 29.04.2016
  • Mendoj se a[...] dhe a[()] janë të ndryshme me qëllim, të paktën dokumenti Numpy e përmend atë këtu: x[()] kthen një kopje të skalarit të vargjeve, x[...] kthen një ndarray 0-dimensionale. A është sepse prerja kthen gjithmonë një grup? Por e vërtetë, në fund x[()] është gjithashtu prerje... 14.12.2017
  • Api i grupit Numpy docs.scipy.org/ doc/numpy/reference/ rekomandon përdorimin e PyArray_Return(PyArrayObject* arr) për të kthyer skalarin e duhur të grupit sa herë që vargjet 0-dimensionale mund të kthehen në Python 17.07.2018
  • Po shqyrtoj të dorëzoj një PR tek numpy për të kërkuar një riemërtim nga np.arraynp.arrayUnlessConstructedWithANonSequenceInWhichCaseItsJustAValue 18.02.2021

  • 2

    Ju duhet të krijoni grupin skalar pak më ndryshe:

    >>> x = numpy.float64(1.111)
    >>> x
    1.111
    >>> numpy.isscalar(x)
    True
    >>> numpy.ndim(x)
    0
    

    Duket se skalarët në numpy mund të jenë paksa koncept i ndryshëm nga me të cilën mund të jeni mësuar nga një këndvështrim thjesht matematikor. Mendoj se po mendoni për sa i përket matricave skalare?

    21.04.2009
    Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..