numpy.array
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
Функция array() создает массив NumPy.
-
- object - подобный массиву объект
- Список или кортеж, а так же лбая функция или объект с методом, возвращаеющие список или кортеж.
- dtype - тип данных NumPy (необязательный)
- Определяет тип данных выходного массива.
- copy - False или True (необязательный)
- Если этот параметр установлен в True (по умолчанию), то объект копируется. В противном случае копирование происходит только если: метод
__array__
объекта возвращает копию, еслиobject
является вложенной последовательностью, если треуется доступ к определенным параметрам массива (dtype, order и т.д.) - order - 'K', 'A', 'C' или 'F' (необязательный)
- Этот параметр определяет в каком порядке массивы должны храниться в памяти: строчном C-стиле или столбчатом стиле Fortran. Если object не является массивом NumPy, то созданный массив будет находиться в памяти в строковом С порядке, если указать флаг 'F', то будет храниться в столбчатом порядке 'Fortran'. Если object - это массив NumPy, то флаг 'K' либо сохраняет порядок исходного массива либо устанавливает самый близкий по структуре; флаг 'A' установит макет памяти выходного массива в 'F' если массив
object
является смежным со столбчатым стилем Fortran, в противном случае макет памяти будет установлен в 'C'. По умолчанию флаг установлен в значение 'K'. - subok- True или False (необязательный)
- Если параметр установлен в значение True (установлено по умодчанию в False), то выходной массив будет использовать тип подкласса массива
object
, если False то тип массива базового класса. - ndmin- целое число (необязательный)
- Определяет минимальное количество измерений результирующего массива, которое, по мере необходимости, будет прикреплено к его форме для удовлетворения этого требования.
-
- результат - массив NumPy
- Массив удовлетворяющий всем указанным требованиям.
Замечание
Довольно большое значение имеет параметр order
, который отвечает за порядок хранения массива в памяти. В некоторых ситуациях этот порядок может изменяться, что в редких случаях может приводить к ошибкам. Например при выполении транспонирования массива порядок 'C' может измениться на порядок 'F':
>>> a = np.array([[1, 2], [1, 2]])
>>> a
array([[1, 2],
[1, 2]])
>>>
>>> b = a.T # Присвоим массиву 'b' транспонированную матрицу 'a'
>>> b
array([[1, 1],
[2, 2]])
>>>
>>> # Теперь проверим порядок хранения в памяти
...
>>> a.flags
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
>>>
>>> b.flags
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False
Как видно, массив a до транспонирования имел C_CONTIGUOUS : True
и F_CONTIGUOUS : False
т.е. был организован в C-стиле, после транспонирования он сменился на стиль Fortran: C_CONTIGUOUS : False
и F_CONTIGUOUS : True
.
Если параметр order
установлен в значение 'A' и в качестве object указан массив с порядком отличным от 'F' или 'C', то результирующий массив не всегда будет иметь ожидаемый флаг 'C'. В редких случаях это так же может приводить к ошибкам.
Примеры
>>> import numpy as np
>>>
>>> np.array([1, 2, 3, 4, 5, 6, 7])
array([1, 2, 3, 4, 5, 6, 7])
>>>
>>>
>>> # Если элементы разного типа, то все они приводятся к наиболее общему:
... np.array([1, 1, 2, 2, 3.14, 3.14])
array([ 1. , 1. , 2. , 2. , 3.14, 3.14])
>>>
>>> np.array([1+1j, 1+1j, 2, 2, 3.14, 3.14])
array([ 1.00+1.j, 1.00+1.j, 2.00+0.j, 2.00+0.j, 3.14+0.j, 3.14+0.j])
>>>
>>>
>>> np.array([[1, 2], [3, 4]]) # Двумерный массив
array([[1, 2],
[3, 4]])
>>> # Создание трехмерного массива
>>> np.array([[[1, 1], [2, 2]],
... [[3, 3], [4, 4]],
... [[5, 5], [6, 6]]])
array([[[1, 1],
[2, 2]],
[[3, 3],
[4, 4]],
[[5, 5],
[6, 6]]])
>>>
>>>
>>> # Создание массива у которого минимум 2 измерения:
... a = np.array([1, 3, 5], ndmin = 2)
>>> a
array([[1, 3, 5]])
>>>
>>>
>>> # Указание типа данных массива:
... np.array([[1, 2], [3, 4]], dtype = complex)
array([[ 1.+0.j, 2.+0.j],
[ 3.+0.j, 4.+0.j]])
>>>
>>>
>>> # Создание структурированного массива:
... y = np.array([(1, 1), (2, 4), (3, 9), (4, 16)], dtype = [('x','i2'),('f_x','f4')])
>>> y['x']
array([1, 2, 3, 4], dtype=int16)
>>> y['f_x']
array([ 1., 4., 9., 16.], dtype=float32)
>>>
>>>
>>> # Создание массивов с использованием подклассов:
... np.array(np.mat('1 1 1; 2 2 2; 3 3 3'))
array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])
>>>
>>> np.array(np.mat('1 1 1; 2 2 2; 3 3 3'), subok = True)
matrix([[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])