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
np.asarray(scalar)
. matrica 1x1... - të menduarit e gjërave në thelb 2D, ose si matrica, nuk është e dobishme këtu 29.04.2016a[...]
dhea[()]
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.2017np.array
nënp.arrayUnlessConstructedWithANonSequenceInWhichCaseItsJustAValue
18.02.2021