English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Свойства массивов NumPy

    Описание свойств массива NumPy и примеры

Мера измерений массива в NumPy называется рангом (rank), это количество измерений массива. Ранг одномерного массива равен 1, ранг двумерного массива равен 2 и так далее.
В NumPy каждый линейный массив называется осью (axis), axis=0 означает операцию по оси 0, то есть операцию с каждой колонкой; axis=1 означает операцию по оси 1, то есть операцию с каждой строкой.
Например, двумерный массив можно представить как два одномерных массива, где каждый элемент первого одномерного массива также является одномерным массивом.
Таким образом, одномерный массив является осью (axis) в NumPy, первая ось соответствует базовому массиву, а вторая ось - это массивы в базовом массиве. Количество осей - ранг, это количество измерений массива.

Одними из важнейших свойств объектов ndarray в массивах NumPy являются

типов данных, поддерживаемых numpy, больше Внутренние типы данных Pythonони значительно больше, в основном они могут соответствовать типам данных языка C, где некоторые типы соответствуют встроенным типам Python. В таблице приведены常用 типы данных NumPy.

ndarray.ndim - ранг, то есть количество осей или количество размерностей.ndarray.shape - размерности массива, для матрицы n строк m столбцов.ndarray.size - общее количество элементов массива, эквивалентное значению n*m в .shape.ndarray.dtype - тип элементов объекта ndarray.ndarray.itemsize - размер каждого элемента объекта ndarray, выраженный в байтах.ndarray.flags - информация о памяти объекта ndarray.ndarray.real - действительная часть элементов ndarray.ndarray.imag - мнимая часть элементов ndarray.ndarray.data - буфер, содержащий фактические элементы массива, так как обычно элементы массива получают через индекс массива, поэтому обычно не нужно использовать этот атрибут.

1、ndarray.ndim

ndarray.ndim используется для возврата числа размерностей массива, равного рангу.

>>> import numpy as np
>>> a = np.arange(24)
>>> print(a.ndim) 
1 # a теперь имеет одну размерность
>>> b = a.reshape(2,4,3)
>>> print(b.ndim)
3 # b теперь имеет три размерности

2、ndarray.shape

ndarray.shape представляет собой размерности массива, возвращая тупль (tuple), длина которого равна числу размерностей, то есть свойству ndim (秩). Например, двумерный массив, его размерности представляют "число строк" и "число столбцов".
ndarray.shape также можно использовать для изменения размера массива.

>>> import numpy as np
>>> a = np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]])
>>> print(a.shape)
(2, 6)
>>> a.shape = (6,2)
>>> print(a)
[[1 2]
 [3 4]
 [5 6]
 [4 5]
 [6 7]
 [8 9]]

В то же время, в NumPy также предоставлена функция reshape для изменения размера массива, пример приведен ниже:

>>> import numpy as np
>>> a = np.array([[1,2,3,4,5,6],[4,5,6,7,8,9]])
>>> b = a.reshape(6,2)
>>> print(b)
[[1 2]
 [3 4]
 [5 6]
 [4 5]
 [6 7]
 [8 9]]

3, ndarray.size

ndarray.size является количеством элементов в массиве. Равен np.prod(a.shape), то есть произведению размеров массива.
a.size возвращает стандартное целое число с任意ной точностью Python. Для других методов получения того же значения может быть по-другому (например, рекомендуетсяый метод np.prod(a.shape), который возвращает экземпляр np.int_), и если это значение используется далее в вычислениях, которые могут привести к переполнению фиксированного大小的 целого типа, это может быть важно.

>>> import numpy as np
>>> x = np.zeros((3, 5, 2), dtype=np.complex128)
>>> x.size
30
>>> np.prod(x.shape)
30

4, ndarray.dtype

>>> import numpy as np
>>> x
array([[0, 1],
       [2, 3]]
>>> x.dtype
dtype('int32')
>>> type(x.dtype)

5, ndarray.itemsize

ndarray.itemsize возвращает размер каждого элемента массива в байтах.
Например, у массива с типом элементов float64 атрибут itemsiz равен 8 (float64 занимает 64 бита, длина каждого байта составляет 8, поэтому 64/8, занимая 8 байт), например, у массива с типом элементов complex32 атрибут item равен 4 (32/8).

>>> import numpy as np
>>> x = np.array([1,2,3,4,5], dtype = np.int8)
>>> print(x.itemsize)
1
>>> y = np.array([1,2,3,4,5], dtype = np.float64)
>>> print(y.itemsize)
8

6, ndarray.flags

ndarray.flags возвращает информацию о памяти объекта ndarray, включая следующие атрибуты:

C_CONTIGUOUS (C) - Данные расположены в едином непрерывном отрезке в стиле C.F_CONTIGUOUS (F) - Данные расположены в едином непрерывном отрезке в стиле Fortran.OWNDATA (O) - Массив обладает им используемым памятью или borrows it from another object.WRITEABLE (W) - Область данных может быть записана, установите это значение в False, чтобы данные были только для чтения.ALIGNED (A) - Данные и все элементы правильно выравнены на аппаратном уровне.UPDATEIFCOPY (U) - Этот массив является копией другого массива, и при его освобождении содержимое исходного массива будет обновлено.

>>> import numpy as np
>>> a = np.array([1,2,3,4,5])
>>> print(a.flags)
  C_CONTIGUOUS: True
  F_CONTIGUOUS: True
  OWNDATA: True
  WRITEABLE: True
  ALIGNED: True
  WRITEBACKIFCOPY: False
  UPDATEIFCOPY: False

7, ndarray.real и x.imag

>>> import numpy as np
>>> x = np.sqrt([1+0j, 0+1j])
>>> x.real
array([1. , 0.70710678])
>>> x.real.dtype
dtype('float64')
>>> x.imag
array([0. , 0.70710678])
>>> x.imag.dtype
dtype('float64')