Размеры массива
В настоящее время я пытаюсь выучить Numpy и Python. Учитывая следующий массив:
import numpy as np
a = np.array([[1,2],[1,2]])
Есть ли функция, которая возвращает размеры a
(например, массив 2 на 2)?
size()
возвращает 4, и это не очень помогает.
10 ответов
Это .shape
:
ndarray. форма
Кортеж размеров массива.
Таким образом:
>>> a.shape
(2, 2)
Первый:
По соглашению, в мире Python, ярлык для numpy
является np
, так:
In [1]: import numpy as np
In [2]: a = np.array([[1,2],[3,4]])
Во-вторых:
В Numpy измерение, ось / оси, форма связаны между собой, а иногда и похожими понятиями:
измерение
В математике / физике размерность или размерность неофициально определяется как минимальное количество координат, необходимое для указания любой точки в пространстве. Но в Numpy, согласно numpy doc, это то же самое, что ось / оси:
В Numpy размеры называются осями. Количество осей - ранг.
In [3]: a.ndim # num of dimensions/axes, *Mathematics definition of dimension*
Out[3]: 2
ось / оси
n-я координата для индексации 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
import numpy as np
>>> np.shape(a)
(2,2)
Также работает, если входные данные не массив Numpy, а список списков
>>> a = [[1,2],[1,2]]
>>> np.shape(a)
(2,2)
Или кортеж кортежей
>>> a = ((1,2),(1,2))
>>> np.shape(a)
(2,2)
Вы можете использовать.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
Ты можешь использовать .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
shape
метод требует, чтобы a
быть Numpy ndarray. Но Numpy также может вычислять форму итераций чистых объектов Python:
np.shape([[1,2],[1,2]])
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
rows = a.shape[0] # 2
cols = a.shape[1] # 2
a.shape #(2,2)
a.size # rows * cols = 4
Поскольку размеры массива numpy хранятся какshape
атрибут,getattr()
также можно использовать.
arr = np.arange(8).reshape(2,2,2)
getattr(arr, 'shape') # (2, 2, 2)
Это полезно, если вам нужно получить его вместе с динамическим списком других свойств. Примером может быть
properties = ['shape', 'ndim', 'size']
d = {prop: getattr(arr, prop) for prop in properties}
# {'shape': (2, 2, 2), 'ndim': 3, 'size': 8}
Выполните нижеприведенный блок кода в записной книжке Python.
import numpy as np
a = np.array([[1,2],[1,2]])
print(a.shape)
print(type(a.shape))
print(a.shape[0])
выход
(2, 2)
<класс 'кортеж'>
2
тогда вы поняли, что
a.shape
это кортеж. так что вы можете получить размер любого размера
a.shape[index of dimention]