Trong Python NumPy một thứ nguyên và trục là gì?


82

Tôi đang viết mã với NumPymô-đun Pythons . Nếu tọa độ của một điểm trong không gian 3D được mô tả [1, 2, 1], đó có phải là ba chiều, ba trục, bậc ba không? Hoặc nếu đó là một chiều thì nó không phải là điểm (số nhiều), không phải là điểm?

Đây là tài liệu:

Trong kích thước Numpy được gọi là trục. Số lượng trục là thứ hạng. Ví dụ, tọa độ của một điểm trong không gian 3D [1, 2, 1] là một mảng có hạng 1, vì nó có một trục. Trục đó có độ dài là 3.

Nguồn: http://wiki.scipy.org/Tentative_NumPy_Tutorial

Câu trả lời:


97

Trong numpy arrays, số chiều đề cập đến số lượng axescần thiết để lập chỉ mục nó, không phải số chiều của bất kỳ không gian hình học nào. Ví dụ: bạn có thể mô tả vị trí của các điểm trong không gian 3D bằng mảng 2D:

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

Trong đó có shapecủa (4, 3)và thứ nguyên 2. Nhưng nó có thể mô tả không gian 3D vì độ dài của mỗi hàng ( axis1) là ba, vì vậy mỗi hàng có thể là thành phần x, y và z của vị trí của một điểm. Độ dài của axis0 cho biết số điểm (ở đây, 4). Tuy nhiên, đó là một ứng dụng cho phép toán mà mã đang mô tả, không phải là một thuộc tính của chính mảng. Trong toán học, thứ nguyên của một vectơ sẽ là độ dài của nó (ví dụ: các thành phần x, y và z của một vectơ 3d), nhưng trong vô nghĩa, bất kỳ "vectơ" nào thực sự chỉ được coi là một mảng 1d có độ dài thay đổi. Mảng không quan tâm kích thước của không gian (nếu có) được mô tả là gì.

Bạn có thể thử với điều này và xem số kích thước và hình dạng của một mảng như sau:

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)

Mảng có thể có nhiều thứ nguyên, nhưng chúng trở nên khó hình dung ở trên hai hoặc ba:

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)


9

Nó thuộc hạng một, vì bạn cần một chỉ mục để lập chỉ mục nó. Đó là một trục có chiều dài 3, như việc lập chỉ mục index có thể cần ba giá trị khác nhau: v[i], i=0..2.


8

Chỉ cần dán một phần câu trả lời từ câu trả lời này :

Trong Numpy, kích thước , trục / các trục , hình dạng có liên quan và đôi khi là các khái niệm tương tự:

In [1]: import numpy as np

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

kích thước

Trong Toán học / Vật lý , thứ nguyên hoặc chiều không chính thức được định nghĩa là số lượng tọa độ tối thiểu cần thiết để xác định bất kỳ điểm nào trong một không gian. Nhưng trong Numpy , theo tài liệu numpy , nó giống như trục / trục:

Trong kích thước Numpy được gọi là trục. Số lượng trục là thứ hạng.

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

trục / trục

các thứ n phối hợp để chỉ số một arraytrong NumPy. Và mảng nhiều chiều có thể có một chỉ mục trên mỗi trục.

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)

hình dạng

mô tả số lượng dữ liệu dọc theo mỗi trục có sẵn.

In [5]: a.shape
Out[5]: (2, 2)  # both the first and second axis have 2 (columns/rows/pages/blocks/...) data

5

Bạn cũng có thể sử dụng tham số trục trong các hoạt động nhóm, trong trường hợp trục = 0 Numpy thực hiện hành động trên các phần tử của mỗi cột và nếu trục = 1, nó thực hiện hành động trên các hàng.

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])

3

Đây là cách tôi hiểu nó. Một điểm là một đối tượng 1D. Bạn chỉ có thể xác định vị trí của nó. Nó không có thứ nguyên. Một đường hoặc bề mặt là một đối tượng 2D. Bạn có thể xác định nó theo cả vị trí và chiều dài hoặc diện tích của nó tương ứng, ví dụ như Hình chữ nhật, Hình vuông, Hình tròn Một thể tích là một đối tượng 3D. Bạn có thể xác định nó theo vị trí, diện tích bề mặt / chiều dài và thể tích của nó, ví dụ: Hình cầu, Hình khối.

Từ đó, bạn sẽ xác định một điểm trong NumPy theo một trục (thứ nguyên), bất kể số lượng trục toán học bạn sử dụng. Đối với trục x và y, một điểm được xác định là [2,4] và đối với trục x, y và z, một điểm được định nghĩa là [2,4,6]. Cả hai đều là điểm, do đó 1D.

Để xác định một đoạn thẳng, cần có hai điểm. Điều này sẽ yêu cầu một số hình thức 'lồng' các điểm vào chiều thứ hai (2D). Do đó, một dòng có thể được xác định bằng cách chỉ sử dụng x và y là [[2,4], [6,9]] hoặc sử dụng x, y và z là [[2,4,6], [6,9,12 ]]. Đối với một bề mặt, nó sẽ chỉ đơn giản là yêu cầu nhiều điểm hơn để mô tả nó, nhưng vẫn là một đối tượng 2D. Ví dụ, một hình tam giác sẽ cần 3 điểm trong khi một hình chữ nhật / hình vuông sẽ cần 4 điểm.

Một khối sẽ yêu cầu 4 (một khối tứ diện) trở lên để xác định nó, nhưng vẫn duy trì 'lồng' các điểm vào chiều thứ ba (3D).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.