Простой Python. Современный стиль программирования (Любанович) - страница 257

>>>> g

>array([10.,···8.5,···7.,···5.5])

Создание массива с помощью функций zeros(), ones() и random()

Метод zeros() возвращает массив, все значения которого равны 0. В эту функцию вам нужно передать аргумент, в котором будет указана желаемая форма массива. Так создается одномерный массив:

>>>> a = np.zeros((3,))

>>>> a

>array([0.,··0.,··0.])

>>>> a.ndim

>1

>>>> a.shape

>(3,)

>>>> a.size

>3

Этот массив имеет ранг 2:

>>>> b = np.zeros((2, 4))

>>>> b

>array([[0.,··0.,··0.,··0.],

>·······[0.,··0.,··0.,··0.]])

>>>> b.ndim

>2

>>>> b.shape

>(2, 4)

>>>> b.size

>8

Другой особой функцией, заполняющей массив одинаковыми значениями, является ones():

>>>> import numpy as np

>>>> k = np.ones((3, 5))

>>>> k

>array([[1.,··1.,··1.,··1.,··1.],

>·······[1.,··1.,··1.,··1.,··1.],

>·······[1.,··1.,··1.,··1.,··1.]])

Последняя функция создает массив и заполняет его случайными значениями из промежутка от 0,0 до 1,0:

>>>> m = np.random.random((3, 5))

>>>> m

>array([[··1.92415699e-01,···4.43131404e-01,···7.99226773e-01,

>··········1.14301942e-01,···2.85383430e-04],

>·······[··6.53705749e-01,···7.48034559e-01,···4.49463241e-01,

>··········4.87906915e-01,···9.34341118e-01],

>·······[··9.47575562e-01,···2.21152583e-01,···2.49031209e-01,

>··········3.46190961e-01,···8.94842676e-01]])

Изменяем форму массива с помощью метода reshape()

До этого момента массив не особо отличался от списка или кортежа. Одним из различий между ними является возможность изменять его форму с помощью функции reshape():

>>>> a = np.arange(10)

>>>> a

>array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>>> a = a.reshape(2, 5)

>>>> a

>array([[0, 1, 2, 3, 4],

>·······[5, 6, 7, 8, 9]])

>>>> a.ndim

>2

>>>> a.shape

>(2, 5)

>>>> a.size

>10

Вы можете изменять форму массива разными способами:

>>>> a = a.reshape(5, 2)

>>>> a

>array([[0, 1],

>·······[2, 3],

>·······[4, 5],

>·······[6, 7],

>·······[8, 9]])

>>>> a.ndim

>2

>>>> a.shape

>(5, 2)

>>>> a.size

>10

Присваиваем кортеж, указывающий параметры формы, атрибуту shape:

>>>> a.shape = (2, 5)

>>>> a

>array([[0, 1, 2, 3, 4],

>·······[5, 6, 7, 8, 9]])

Единственное ограничение — произведение рангов должно быть равным количеству значений (в нашем случае 10):

>>>> a = a.reshape(3, 4)

>Traceback (most recent call last):

>··File "", line 1, in

>ValueError: total size of new array must be unchanged

Получаем элемент с помощью конструкции []

Одномерный массив работает как список:

>>>> a = np.arange(10)

>>>> a[7]

>7

>>>> a[-1]

>9

Но если массив имеет другую форму, используйте индексы, разделенные запятыми:

>>>> a.shape = (2, 5)

>>>> a

>array([[0, 1, 2, 3, 4],

>·······[5, 6, 7, 8, 9]])

>>>> a[1,2]

>7

Это отличается от двухмерного списка:

>>>> l = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]