W Pythonie NumPy czym jest wymiar i oś?

Koduję za pomocą modułu Pythons NumPy. Jeśli współrzędne punktu w przestrzeni 3D są opisane jako [1, 2, 1], to czy nie byłyby to trzy wymiary, trzy oś, ranga trzech? A jeśli to jest jeden wymiar to czy nie powinny to być punkty (liczba mnoga), a nie Punkt?

Oto dokumentacja:

W Numpy wymiary nazywane są osiami. Liczba osi jest rangą. Na przykład współrzędne punktu w przestrzeni trójwymiarowej [1, 2, 1] to tablica rzędu 1, ponieważ ma jedną oś. Ta oś ma długość 3.

Źródło: http://wiki.scipy.org/Tentative_NumPy_Tutorial

Author: baduker, 2013-10-15

6 answers

W numpy arrays, wymiarowość odnosi się do liczby axes potrzebnej do jej indeksowania, a nie do wymiarowości dowolnej przestrzeni geometrycznej. Na przykład, można opisać lokalizacje punktów w przestrzeni 3D za pomocą tablicy 2D:

array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

Który ma shape z (4, 3) i wymiar 2. Ale może opisywać przestrzeń 3D, ponieważ długość każdego wiersza (axis 1) wynosi trzy, więc każdy wiersz może być składową X, y i z położenia punktu. Długość axis 0 oznacza liczbę punktów (tutaj, 4). Jest to jednak bardziej zastosowanie do matematyki, które opisuje kod, a nie atrybut samej tablicy. W matematyce wymiarem wektora byłaby jego długość (np. składowe X, y i z wektora 3d), ale w numpy każdy "wektor" jest po prostu uważany za tablicę 1D o różnej długości. Tablica nie obchodzi, jaki jest wymiar opisywanej przestrzeni (jeśli istnieje).

Możesz się tym bawić i zobaczyć liczbę wymiarów i kształtów tablica jak tak:

In [262]: a = np.arange(9)

In [263]: a
Out[263]: array([0, 1, 2, 3, 4, 5, 6, 7, 8])

In [264]: a.ndim    # number of dimensions
Out[264]: 1

In [265]: a.shape
Out[265]: (9,)

In [266]: b = np.array([[0,0,0],[1,2,3],[2,2,2],[9,9,9]])

In [267]: b
Out[267]: 
array([[0, 0, 0],
       [1, 2, 3],
       [2, 2, 2],
       [9, 9, 9]])

In [268]: b.ndim
Out[268]: 2

In [269]: b.shape
Out[269]: (4, 3)

Tablice mogą mieć wiele wymiarów, ale stają się trudne do wizualizacji powyżej dwóch lub trzech:

In [276]: c = np.random.rand(2,2,3,4)

In [277]: c
Out[277]: 
array([[[[ 0.33018579,  0.98074944,  0.25744133,  0.62154557],
         [ 0.70959511,  0.01784769,  0.01955593,  0.30062579],
         [ 0.83634557,  0.94636324,  0.88823617,  0.8997527 ]],

        [[ 0.4020885 ,  0.94229555,  0.309992  ,  0.7237458 ],
         [ 0.45036185,  0.51943908,  0.23432001,  0.05226692],
         [ 0.03170345,  0.91317231,  0.11720796,  0.31895275]]],


       [[[ 0.47801989,  0.02922993,  0.12118226,  0.94488471],
         [ 0.65439109,  0.77199972,  0.67024853,  0.27761443],
         [ 0.31602327,  0.42678546,  0.98878701,  0.46164756]],

        [[ 0.31585844,  0.80167337,  0.17401188,  0.61161196],
         [ 0.74908902,  0.45300247,  0.68023488,  0.79672751],
         [ 0.23597218,  0.78416727,  0.56036792,  0.55973686]]]])

In [278]: c.ndim
Out[278]: 4

In [279]: c.shape
Out[279]: (2, 2, 3, 4)
 68
Author: askewchan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 14:04:48

Jest rangą pierwszą, ponieważ potrzebujesz jednego indeksu, aby go indeksować. Ta jedna oś ma długość 3, ponieważ indeks indeksujący może przyjmować trzy różne wartości: v[i], i=0..2.

 6
Author: Bálint Aradi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-15 20:08:13

Wystarczy wkleić część odpowiedzi z tej odpowiedzi :

W Numpy, wymiar, oś / osi, kształt są pokrewne i czasami podobne pojęcia:

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

Wymiar

W Matematyka/Fizyka wymiar lub wymiarowość jest nieformalnie definiowana jako minimalna liczba współrzędnych potrzebnych do określenia dowolnego punktu w przestrzeni. Ale w Numpy , zgodnie z numpy doc , jest to to samo, co oś/osi:

W Numpy wymiary nazywane są osiami. Liczba osi jest rangą.

In [3]: a.ndim  # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2

Oś / osi

NTH współrzędna do indeksu an {[4] } w Numpy. Tablice wielowymiarowe mogą mieć po jednym indeksie na oś.

In [4]: a[1,0]  # to index `a`, we specific 1 at the first axis and 0 at the second axis.
Out[4]: 3  # which results in 3 (locate at the row 1 and column 0, 0-based index)

Kształt

Opisuje, ile danych wzdłuż każdej dostępnej osi.

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data
 4
Author: YaOzI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:53

Możesz również użyć parametru axis w operacjach grupowych, w przypadku axis=0 Numpy wykonuje akcję na elementach każdej kolumny, a jeśli axis=1, wykonuje akcję na wierszach.

test = np.arange(0,9).reshape(3,3)

Out[3]: 
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

test.sum(axis=0)
Out[5]: array([ 9, 12, 15])

test.sum(axis=1)
Out[6]: array([ 3, 12, 21])
 2
Author: Alex Granovsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 09:50:43

Tak to Rozumiem. Punkt jest obiektem 1D. Można tylko określić jego pozycję. Nie ma wymiarów. Linia lub powierzchnia jest obiektem 2D. Można go zdefiniować zarówno po położeniu, jak i długości lub obszarze, np. Prostokąt, kwadrat, okrąg Wolumin jest obiektem 3D. Można go zdefiniować według jego położenia, powierzchni / długości i objętości np. Sfera, Kostka.

Na tej podstawie zdefiniujesz punkt w NumPy przez pojedynczą oś (wymiar), niezależnie od liczby osi matematycznych Ty używasz. Dla osi x i y punkt jest zdefiniowany jako [2,4], A dla osi x, y i z punkt jest zdefiniowany jako [2,4,6]. Oba są punktami, a więc 1D.

Aby zdefiniować linię, potrzebne będą dwa punkty. Będzie to wymagało pewnego rodzaju "zagnieżdżenia" punktów do drugiego wymiaru (2D). Jako taka linia może być zdefiniowana za pomocą x I y tylko jako [[2,4],[6,9]] lub za pomocą X, y i z jako [[2,4,6],[6,9,12]]. Dla powierzchni, będzie po prostu wymagać więcej punktów do jej opisania, ale nadal pozostaje obiektem 2D. Na przykład trójkąt będzie potrzebował 3 punktów, a prostokąt/kwadrat będzie potrzebował 4.

Wolumin wymaga 4 (czworościan)lub więcej punktów , aby go zdefiniować, ale nadal zachowuje "zagnieżdżanie" punktów do trzeciego wymiaru (3D).

 1
Author: Ludex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 15:55:29

Jeśli ktoś potrzebuje tego wizualnego opisu:

numpy oś 0 i oś 1

 0
Author: debaonline4u,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 05:39:03