Об'ємні розміри масиву


367

Зараз я намагаюся вивчити Numpy та Python. З огляду на такий масив:

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

Чи є функція, яка повертає розміри a(ega - це масив 2 на 2)?

size() повертає 4, і це не дуже допомагає.


26
Порада: ваші "розміри" називаються shapeв NumPy. Те, що NumPy називає виміром, - 2, у вашому випадку ( ndim). Корисно знати звичайну термінологію NumPy: це полегшує читання документів!
Ерік О Лебігот

Відповіді:


498

Це .shape:

ndarray. Форма
розміру масиву масиву.

Таким чином:

>>> a.shape
(2, 2)

25
Примітка: shapeможе бути більш точно описаний як атрибут, ніж як функція , оскільки він не викликається за допомогою синтаксису функціонального виклику.
nobar

17
@nobar насправді це властивість (яка є і атрибутом, і функцією, насправді)
wim

@wim більш конкретно властивість - це клас . Що стосується властивостей класу (властивості, яку ви кладете у свій клас), вони є об'єктами властивості типу, що піддаються впливу атрибутів класу. Атрибут у python - це ім'я, що слідує за крапкою .
Педро Родрігес

2
Якщо ви насправді хочете набрати нитки, це дескриптор. Хоча propertyсам клас, ndarray.shapeне клас, це екземпляр типу властивості.
Вім

66

Спочатку:

Згідно з умовою, в Python світі ярлик для такого numpyє np:

In [1]: import numpy as np

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

Другий:

У Numpy розмірність , вісь / осі , форма пов'язані між собою, а іноді і подібні поняття:

вимір

У математиці / фізиці розмірність або розмірність неофіційно визначається як мінімальна кількість координат, необхідна для визначення будь-якої точки всередині простору. Але в Numpy , згідно з документом numpy , це те саме, що й осі / осі:

У Numpy розміри називаються осями. Кількість осей - ранг.

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

вісь / осі

енний координат індексувати arrayв Numpy. А багатовимірні масиви можуть мати один індекс на вісь.

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)

форма

описує кількість даних (або діапазон) уздовж кожної наявної осі.

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)

Також працює, якщо вхід - це не масивний масив, а список списків

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

Або кортеж кортежів

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

np.shapeспочатку перетворює свій аргумент у масив, якщо він не має атрибуту фігури, тому він працює у списку та корректирує приклади.
hpaulj

17

Ви можете використовувати .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

Ви можете використовувати .ndimдля вимірювання і .shapeзнати точний вимір

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

var.ndim
# displays 2

var.shape
# display 6, 2

Ви можете змінити розмірність за допомогою .reshapeфункції

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

shapeМетод вимагає , щоб aбути ndarray Numpy. Але Numpy також може обчислити форму ітерабелів чистих пітонних об'єктів:

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

1

a.shapeце лише обмежена версія np.info(). Заціни:

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

Вийшов

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.