Kích thước mảng Numpy


367

Tôi hiện đang cố gắng học Numpy và Python. Cho mảng sau:

import numpy as np
a = np.array([[1,2],[1,2]])

Có một hàm trả về kích thước của a(ega là một mảng 2 x 2) không?

size() trả về 4 và điều đó không giúp được gì nhiều.


26
Một lời khuyên: "kích thước" của bạn được gọi là shape, trong NumPy. Cái mà NumPy gọi là thứ nguyên là 2, trong trường hợp của bạn ( ndim). Thật hữu ích khi biết thuật ngữ NumPy thông thường: điều này giúp việc đọc tài liệu dễ dàng hơn!
Eric O Lebigot

Câu trả lời:


498

Nó là .shape :

ndarray. hình dạng
Tuple của kích thước mảng.

Như vậy:

>>> a.shape
(2, 2)

25
Lưu ý: shapecó thể được mô tả chính xác như một thuộc tính hơn là một hàm , vì nó không được gọi bằng cú pháp gọi hàm.
tộc

17
@nobar thực sự nó là một tài sản ( thực sự là cả một thuộc tính và chức năng)
wim

@wim cụ thể hơn tài sản là một lớp . Trong trường hợp thuộc tính lớp (thuộc tính bạn đặt trong lớp), chúng là đối tượng của thuộc tính loại được hiển thị dưới dạng một thuộc tính của lớp. Một thuộc tính, trong python, là tên theo dấu chấm .
Pedro Coleues

2
Nếu bạn thực sự muốn nitpick, đó là một mô tả. Mặc dù propertybản thân nó là một lớp, ndarray.shapekhông phải là một lớp, nó là một thể hiện của loại thuộc tính.
wim

66

Đầu tiên:

Theo quy ước, trong thế giới Python, lối tắt cho numpynp, vì vậy:

In [1]: import numpy as np

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

Thứ hai:

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

kích thước

Trong Toán học / Vật lý , thứ nguyên hoặc thứ nguyên được định nghĩa không chính thức là số tọa độ tối thiểu cần thiết để chỉ định bất kỳ điểm nào trong một không gian. Nhưng trong Numpy , theo tài liệu của 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à cấp bậc.

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 đa chiều có thể có một chỉ số 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ả có bao nhiêu dữ liệu (hoặc phạm vi) 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

45
import numpy as np   
>>> np.shape(a)
(2,2)

Cũng hoạt động nếu đầu vào không phải là một mảng numpy mà là một danh sách các danh sách

>>> a = [[1,2],[1,2]]
>>> np.shape(a)
(2,2)

Hoặc một tuple

>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)

np.shapeđầu tiên biến đối số của nó thành một mảng nếu nó không có thuộc tính hình dạng, đó là lý do tại sao nó hoạt động trên danh sách và các ví dụ tuple.
hpaulj

17

Bạn có thể sử dụng .shape

In: a = np.array([[1,2,3],[4,5,6]])
In: a.shape
Out: (2, 3)
In: a.shape[0] # x axis
Out: 2
In: a.shape[1] # y axis
Out: 3

9

Bạn có thể sử dụng .ndimcho kích thước và .shapeđể biết kích thước chính xác

var = np.array([[1,2,3,4,5,6], [1,2,3,4,5,6]])

var.ndim
# displays 2

var.shape
# display 6, 2

Bạn có thể thay đổi kích thước bằng .reshapechức năng

var = np.array([[1,2,3,4,5,6], [1,2,3,4,5,6]]).reshape(3,4)

var.ndim
#display 2

var.shape
#display 3, 4

7

Các shapephương pháp đòi hỏi alà một ndarray NumPy. Nhưng Numpy cũng có thể tính toán hình dạng lặp của các đối tượng trăn thuần túy:

np.shape([[1,2],[1,2]])

1

a.shapechỉ là một phiên bản giới hạn của np.info(). Kiểm tra này:

import numpy as np
a = np.array([[1,2],[1,2]])
np.info(a)

Ngoài

class:  ndarray
shape:  (2, 2)
strides:  (8, 4)
itemsize:  4
aligned:  True
contiguous:  True
fortran:  False
data pointer: 0x27509cf0560
byteorder:  little
byteswap:  False
type: int32
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.