SlideShare a Scribd company logo
Основы NumPy
Технологии и языки программирования
Юдинцев В. В.
Кафедра теоретической механики
Самарский университет
8 апреля 2017 г.
NumPy
NumPy базовая библиотека для научных вычислений в
среде Python, предлагающая поддержку многомерных
массивов, матриц и эффективных функция для работы c
этими типами данных.
Быстродействие кода Python c использованием NumPy в 50
раз быстрее кода на “чистом” Python1
и сравнимо с
быстродействием коммерческого пакета матричной
алгебры MATLAB.
1
http://scipy.github.io/old-wiki/pages/PerformancePython
Импорт модуля
Вариант 1
import numpy
v = numpy . array ( [ 1 , 2 ] )
Вариант 2 (рекомендуется)
import numpy as np
v = np . array ( [ 1 , 2 ] )
Вариант 3
from numpy import *
v = array ( [ 1 , 2 ] )
array
1 import numpy as np
2 a = np . array ( [ [ 1 , 2 , 3] , [4 , 5 , 6 ] ] )
Свойства
Размерность массива
1 >>> a . ndim
2 2
Размеры (по каждому измерению)
1 >>> a . shape
2 (2 , 3)
Количество элементов (суммарное)
1 >>> a . size
2 6
Тип данных массива
1 import numpy as np
2 a = np . array ( [ [ 1 , 2 , 3] , [4 , 5 , 6 ] ] )
3 p r i n t ( a . dtype )
int64
1 a = np . array ( [ [ 1 . 0 , 2.0 , 3 . 0 ] , [ 4 . 0 , 5.0 , 6 . 0 ] ] )
2 p r i n t ( a . dtype )
float64
Функции для создания массивов
Генератор последовательностей
arange( start, stop, step, dtype )
start: начальное значение
stop: конечное значение (не включается в результат)
step: шаг
dtype: тип данных
От минус 1.0 до 1.0 с шагом 0.2:
1 v = np . arange ( −1.0 , 1.0 , 0 . 2 )
2 v
array ( [ −1.00000000e+00 , −8.00000000e−01, −6.00000000e−01,
−4.00000000e−01, −2.00000000e−01, −2.22044605e−16,
2.00000000e−01, 4.00000000e−01, 6.00000000e−01,
8.00000000e−01])
Массив нулевых значений
zeros( shape, dtype = float, order = ’C’ )
shape: размерность массива
dtype: тип элементов массива
order: порядок хранения элементов
>>> np . zeros ( 5 )
array ( [ 0 . , 0 . , 0 . , 0 . , 0 . ] )
Матрица-столбец нулевых значений
>>> np . zeros ( ( 2 , 1 ) )
array ( [ [ 0 . ] ,
[ 0 . ] ] )
Массив единиц
ones( shape, dtype = float, order = ’C’ )
shape: размерность массива
dtype: тип элементов массива
order: порядок хранения элементов
>>> np . ones ( 5 )
array ( [ 1 . , 1 . , 1 . , 1 . , 1 . ] )
Матрица единиц
>>> np . ones ( (3 , 2) )
array ( [ [ 1 . , 1 . ] ,
[ 1 . , 1 . ] ,
[ 1 . , 1 . ] ] )
Сетка на заданном интервале
linspace(start, stop, num=50, endpoint=True, retstep=False, ...)
start: начальное значение
stop: конечное значение
num: количество элементов
endpoint: если True, то последний элемент (end) включается
в результат
retstep: возвращать и вычисленное значение шага
>>> np . linspace ( 0 . 0 , 2.0 , 4)
array ( [ 0. , 0.66666667 , 1.33333333 , 2. ] )
Матрица единиц
>>> np . linspace ( 0 . 0 , 2.0 , 4 , retstep = True )
( array ( [ 0. , 0.66667 , 1.3333 , 2. ] ) , 0.66666)
Функция от индексов массива
1 a = np . fromfunction ( lambda i , j : i == j , (3 , 3) )
2 p r i n t ( a )
[ [ True , False , False ] ,
[ False , True , False ] ,
[ False , False , True ] ]
Копирование
Операция “присвоения” создает новую ссылку (псевдоним) на
объект в памяти:
1 a = np . array ( [ [1 , 2] , [3 , 4] ] )
2 b = a
3 p r i n t ( b i s a )
True
Для создания копии массива используется метод copy():
3 b = a . copy ( )
4 p r i n t ( b i s a )
False
Основные операции
Изменение размерности
Функция reshape изменяет размерность массива, не меняя сами
данные (новый “взгляд” на массив)
1 a = np . arange ( 6 )
2 p r i n t ( a )
[0 1 2 3 4 5]
3 b = np . reshape ( a , (3 , 2) )
4 p r i n t ( b )
5 b [ 0 , 0 ] = 9
6 p r i n t ( a )
[ [ 0 1]
[2 3]
[4 5 ] ]
[9 1 2 3 4 5]
Изменение размерности
Одна из размерностей может быть равна “-1”. В этом случае эта
размерность вычисляется:
1 a = np . reshape ( np . arange ( 6 ) , (3 , −1) )
2 p r i n t ( a )
[ [ 0 1]
[2 3]
[4 5 ] ]
Плоский список
Преобразование многомерного массива в “плоский” список
(стиль Си: order=’C’ по умолчанию):
3 b = np . reshape ( a , −1)
4 p r i n t ( b )
[0 , 1 , 2 , 3 , 4 , 5]
Плоский список
Преобразование многомерного массива в “плоский” список
(стиль Фортран: order=’F’)
3 b = np . reshape ( a , −1 , order = ’ F ’ )
4 p r i n t ( b )
[0 , 2 , 4 , 1 , 3 , 5]
Формирование плоского списка: ravel
Преобразование многомерного массива в “плоский” список
(стиль Си: order=’C’ по умолчанию):
1 a = np . reshape ( np . arange ( 6 ) , (3 , −1) )
2 p r i n t ( a )
[ [ 0 1]
[2 3]
[4 5 ] ]
3 b = np . ravel ( a )
4 p r i n t ( b )
[0 1 2 3 4 5]
5 b = np . ravel ( a , order = ’ F ’ )
6 p r i n t ( b )
[0 2 4 1 3 5]
vstack: склейка строк
1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )
3 c = np . vstack ( ( a , b ) )
4 p r i n t ( c )
[ [ 1 2]
[3 4]
[5 6]
[7 8 ] ]
hstack: склейка столбцов
1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )
3 c = np . hstack ( ( a , b ) )
4 p r i n t ( c )
[ [ 1 2 5 6]
[3 4 7 8 ] ]
hsplit: разделение на части по горизонтали
1 a = np . f l o o r ( 10 * np . random . random ( (2 ,12) ) )
2 p r i n t ( a )
[ [ 6. 9. 2. 8. 6. 8 . ]
[ 2. 1. 6. 8. 8. 6 . ] ]
3 np . h s p l i t ( a , 3 )
[ array ( [ [ 6 . , 9 . ] ,
[ 2 . , 1 . ] ] ) ,
array ( [ [ 2 . , 8 . ] ,
[ 6 . , 8 . ] ] ) ,
array ( [ [ 6 . , 8 . ] ,
[ 8 . , 6 . ] ] ) ]
vsplit: разделение на части вертикали
1 a = np . f l o o r ( 10*np . random . random ( ( 4 , 2 ) ) )
2 p r i n t ( a )
[ [ 5. 6 . ]
[ 1. 5 . ]
[ 5. 6 . ]
[ 4. 3 . ] ]
3 np . v s p l i t ( a , 2 )
[ array ( [ [ 5 . , 6 . ] ,
[ 1 . , 5 . ] ] ) ,
array ( [ [ 5 . , 6 . ] ,
[ 4 . , 3 . ] ] ) ]
Функции
Арифметические операции
Арифметические операции выполняются поэлементно
1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )
3 c = a + b
4 p r i n t ( c )
[ [ 6 8]
[10 12]]
1 c = 2 * ( a + b )
2 p r i n t ( c )
[[12 16]
[20 24]]
Математические функции
1 a = np . reshape ( np . arange ( 6 ) , (2 , −1) )
2 p r i n t ( a )
[ [ 0 1 2]
[3 4 5 ] ]
Возведение в степень:
3 p r i n t ( np . power ( a , 2 ) )
[ [ 0 , 1 , 4] ,
[ 9 , 16 , 25]]
3 p r i n t ( np . power ( a , a ) )
[ [ 1 1 4]
[ 27 256 3125]]
Математические функции
1 a = np . reshape ( np . arange ( 6 ) , (2 , −1) )
2 p r i n t ( a )
[ [ 0 1 2]
[3 4 5 ] ]
3 p r i n t ( np . exp ( a ) )
[ [ 1. 2.71828183 7.3890561 ]
[ 20.08553692 54.59815003 148.4131591 ] ]
3 p r i n t ( a / ( a +1) )
[ [ 0. 0.5 0.66666667]
[ 0.75 0.8 0.83333333]]
dot: скалярное произведение
1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] )
3
4 c = np . dot ( a , b )
5
6 p r i n t ( c )
[[19 22]
[43 50]]
Индексы и срезы
Индексация
1 a = np . arange ( 8 ) **2
2 p r i n t ( a )
[ 0 1 4 9 16 25 36 49]
Индексация начинается с нуля. Третий элемент массива имеет
индекс “2”:
2 p r i n t ( a [ 2 ] )
4
Срезы
1 a = np . arange ( 8 ) **2
2 p r i n t ( a )
[ 0 1 4 9 16 25 36 49]
[ Начальное значение: граница: шаг ]
3 p r i n t ( a [ 2 : 6 : 2 ] )
4 , 16
Многомерные массивы
1 a = np . reshape ( np . arange ( 8 ) ,(2 , −1) )
2 p r i n t ( a )
[ [ 0 1 2 3]
[4 5 6 7 ] ]
3 p r i n t ( a [ 0 , 1 ] )
1
4 p r i n t ( a [ : , 1 ] )
[1 5]
5 p r i n t ( a [ : , 1 : 3 ] )
[ [ 1 2]
[5 6 ] ]
Многомерные массивы
1 a = np . reshape ( np . arange ( 8 ) ,(2 , −1) )
2 p r i n t ( a )
[ [ 0 1 2 3]
[4 5 6 7 ] ]
Последняя строка
3 p r i n t ( a [ −1 ,:] )
[4 5 6 7]
Второй столбец с конца
4 p r i n t ( a [: , −2] )
[2 6]
Использование ... вместо :
1 a = np . array ( [ [ [ 0 , 1 , 2] ,
2 [ 10 , 12 , 1 3 ] ] ,
3 [[100 ,101 ,102] ,
4 [110 ,112 ,113]]])
5 p r i n t ( a . shape )
(2 , 2 , 3)
3 p r i n t ( a [ 1 , . . . ] )
[ [ 0 , 1 , 2] ,
[ 10 , 12 , 13]]
4 p r i n t ( a [ . . . , 2 ] )
[ [ 2 13]
[102 113]]
Массив, как итератор
При использовании массивов в конструкциях типа for ... in,
итерация выполняется только по первой размерности:
1 a = np . array ( [ [ [ 0 , 1 , 2] ,
2 [ 10 , 12 , 1 3 ] ] ,
3 [[100 ,101 ,102] ,
4 [110 ,112 ,113]]])
5
6 f o r row in a :
7 p r i n t ( ’ Element : ’ , row )
Element : [ [ 0 1 2]
[10 12 13]]
Element : [[100 101 102]
[110 112 113]]
Массив, как итератор
Итерация по всем элементам (последовательно по каждой
размерности):
1 a = np . array ( [ [ [ 0 , 1 , 2] , [ 10 , 12 , 1 3 ] ] ,
2 [[100 ,101 ,102] , [110 ,112 ,113]]])
3 f o r i in np . ravel ( a ) :
4 p r i n t ( ’ Element ’ , i )
Element 0
Element 1
Element 2
Element 10
. . .
Element 101
Element 102
Element 110
Element 112
Element 113
Индексация при помощи массива индексов
1 a = np . arange ( 6 ) *2
2 i = np . array ( [ 1 , 3 , 5 , 2 ] )
3
4 p r i n t ( a [ i ] )
[ 2 6 10 4]
5 i = np . array ( [ [1 , 3] , [5 , 2] ] )
6
7 p r i n t ( a [ i ] )
[ [ 2 6]
[10 4 ] ]
Индексация при помощи массива типа bool
1 a = np . arange ( 6 ) *2
2 p r i n t ( a )
[ 0 2 4 6 8 10]
Булев массив (каждый элемент сравнивается с 4):
3 p r i n t ( a>4 )
[ False False False True True True ]
Использование массива для извлечения элементов:
4 p r i n t ( a [ a >4] )
[ 6 8 10]
Статистические функции
min, max, sum
1 a = np . array ( [ [1 , 2] , [3 , 4] ] )
Минимальное значение всего массива
2 p r i n t ( a . min ( ) )
1
Минимальные значения столбцов
3 p r i n t ( a . min ( axis =0) )
[1 2]
Минимальные значения строк
4 p r i n t ( a . min ( axis =1) )
[1 3]
min, max, sum
1 a = np . array ( [ [1 , 2] , [3 , 4] ] )
Сумма всех значений
2 p r i n t ( a . sum ( ) )
10
Сумма строк
3 p r i n t ( a . sum ( axis =0) )
[4 6]
Сумма столбцов
4 p r i n t ( a . sum ( axis =1) )
[3 7]
Среднее значение
1 a = np . array ( [ [1 , 2] , [3 , 4] ] )
Среднее значение всех элементов
2 p r i n t ( a . mean ( ) )
2.5
Среднее по первой размерности (в столбцах)
3 p r i n t ( a . mean ( axis =0) )
[ 2 . 3 . ]
Среднее по второй размерности (в строках)
4 p r i n t ( a . mean ( axis =1) )
[ 1.5 3 . 5 ]
Файловые функции
Чтение массива из текстового файла
File1.txt
# Results
1 23 5
2 65 6
4 55 4
Прочитать значения из файла File1.txt в массив res
1 res = np . loadtxt ( ” f i l e 1 . t x t ” , de l i mi t e r = ” ” )
2 p r i n t ( res )
[ [ 1. 23. 5 . ]
[ 2. 65. 6 . ]
[ 4. 55. 4 . ] ]
Чтение массива из файла: usecols
File1.txt
# Results
1 23 5
2 65 6
4 55 4
Прочитать значения из файла File1.txt в массив res столбцы с
индексами 1 и 2:
1 res = np . loadtxt ( ” f i l e 1 . t x t ” , usecols = (1 , 2) )
2 p r i n t ( res )
[ [ 23. 5 . ]
[ 65. 6 . ]
[ 55. 4 . ] ]
Чтение массива из файла: skiprows
File1.txt
# Results
1 23 5
2 65 6
4 55 4
Прочитать значения из файла File1.txt в массив res, пропустив
первые две строки
1 res = np . loadtxt ( ” f i l e 1 . t x t ” , skiprows = 2 )
2 p r i n t ( res )
[ [ 2. 65. 6 . ]
[ 4. 55. 4 . ] ]
Запись массива в текстовый файл
x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) )
table = np . hstack ( ( x , np . sin ( x ) ) )
np . savetxt ( ’ sin . t x t ’ , table , de l i m it e r = ’ , ’ )
Содержимое файла sin.txt
0.000000000000000000e+00 ,0.000000000000000000e+00
7.853981633974482790e−01,7.071067811865474617e−01
1.570796326794896558e+00 ,1.000000000000000000e+00
2.356194490192344837e+00 ,7.071067811865475727e−01
3.141592653589793116e+00 ,1.224646799147353207e−16
Форматирование вывода
x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) )
table = np . hstack ( ( x , np . sin ( x ) ) )
np . savetxt ( ’ sin . t x t ’ , table , fmt= ’ %7.4 f ’ )
Содержимое файла sin.txt
0.0000 0.0000
0.7854 0.7071
1.5708 1.0000
2.3562 0.7071
3.1416 0.0000
Форматирование вывода
x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) )
table = np . hstack ( ( x , np . sin ( x ) ) )
np . savetxt ( ’ sin . t x t ’ , table , fmt = ’ %9.4g ’ ,
header = ’−−data s t a r t −− ’ ,
footer = ’−− data end −− ’ ) )
Содержимое файла sin.txt
# −−data s t a r t −−
0 0
0.7854 0.7071
1.571 1
2.356 0.7071
3.142 1.225e−16
# −− data end −−
Справка
1 Quickstart tutorial
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
2 Numpy User Guide
https://docs.scipy.org/doc/numpy/user/
3 Numpy Reference Guide
https://docs.scipy.org/doc/numpy/reference/

More Related Content

DOCX
διδακτικό σενάριο για μελέτη της όσο στο Scratch
PPTX
Asfaleia sto diadiktyo
PDF
Ροπή αδρανείας σφαιρικού φλοιού 4
PDF
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
PPT
Множення одночлена на многочлен
DOCX
Damrigeblis portfolio
PPTX
საკონფერენციო თემა 2013 prezentacia
PDF
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3
διδακτικό σενάριο για μελέτη της όσο στο Scratch
Asfaleia sto diadiktyo
Ροπή αδρανείας σφαιρικού φλοιού 4
ΑΛΓΟΡΙΘΜΟΙ ΣΕ C - ΜΑΘΗΜΑ 2 - ΑΝΑΖΗΤΗΣΗ ΣΤΟΙΧΕΙΟΥ ΣΕ ΠΙΝΑΚΑ
Множення одночлена на многочлен
Damrigeblis portfolio
საკონფერენციო თემა 2013 prezentacia
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΣΕ C - ΜΑΘΗΜΑ 3

Similar to Основы NumPy (20)

PPT
291 цикл уроков на тему массивы
PPTX
Основные действия с матрицами
PDF
Про Python и вычисления.
PDF
Руслан Гроховецкий — Python и вычисления
PDF
PPTX
PDF
Ruby: работа с массивами
PPT
04 array
PPTX
Алгоритмы и структуры данных весна 2014 лекция 1
PPT
Одномерные массивы целых чисел
PDF
Лекция 12. Быстрее, Python, ещё быстрее.
PPTX
VHDL composite data types, arrays, records
PPTX
Начало работы в R
PDF
Лекция 5. Встроенные коллекции и модуль collections.
PDF
CV2011-2. Lecture 12. Face models.
PPTX
Действия с одномерными массивами
PDF
Основы языка R
PDF
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
291 цикл уроков на тему массивы
Основные действия с матрицами
Про Python и вычисления.
Руслан Гроховецкий — Python и вычисления
Ruby: работа с массивами
04 array
Алгоритмы и структуры данных весна 2014 лекция 1
Одномерные массивы целых чисел
Лекция 12. Быстрее, Python, ещё быстрее.
VHDL composite data types, arrays, records
Начало работы в R
Лекция 5. Встроенные коллекции и модуль collections.
CV2011-2. Lecture 12. Face models.
Действия с одномерными массивами
Основы языка R
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Ad

More from Theoretical mechanics department (20)

PDF
Космический мусор
PDF
Модификация механизма Йо-Йо
PDF
Python. Объектно-ориентированное программирование
PDF
Python. Обработка ошибок
PDF
Python: ввод и вывод
PDF
Python: Модули и пакеты
PDF
Основы Python. Функции
PDF
Основы языка Питон: типы данных, операторы
PDF
Машинная арифметика. Cтандарт IEEE-754
PPTX
Chaotic motions of tethered satellites with low thrust
PPTX
Docking with noncooperative spent orbital stage using probe-cone mechanism
PDF
Алгоритмы и языки программирования
PDF
Deployers for nanosatellites
PPTX
CubeSat separation dynamics
PDF
Chaotic Behavior of a Passive Satellite During Towing by a Tether
PDF
Основы MATLAB. Численные методы
PPTX
Транспортно-пусковой контейнер для наноспутников типоразмера 3U, 3U+
PPTX
On problems of active space debris removal using tethered towing
PDF
Методы решения нелинейных уравнений
PDF
Наноспутники формата кубсат
Космический мусор
Модификация механизма Йо-Йо
Python. Объектно-ориентированное программирование
Python. Обработка ошибок
Python: ввод и вывод
Python: Модули и пакеты
Основы Python. Функции
Основы языка Питон: типы данных, операторы
Машинная арифметика. Cтандарт IEEE-754
Chaotic motions of tethered satellites with low thrust
Docking with noncooperative spent orbital stage using probe-cone mechanism
Алгоритмы и языки программирования
Deployers for nanosatellites
CubeSat separation dynamics
Chaotic Behavior of a Passive Satellite During Towing by a Tether
Основы MATLAB. Численные методы
Транспортно-пусковой контейнер для наноспутников типоразмера 3U, 3U+
On problems of active space debris removal using tethered towing
Методы решения нелинейных уравнений
Наноспутники формата кубсат
Ad

Основы NumPy

  • 1. Основы NumPy Технологии и языки программирования Юдинцев В. В. Кафедра теоретической механики Самарский университет 8 апреля 2017 г.
  • 2. NumPy NumPy базовая библиотека для научных вычислений в среде Python, предлагающая поддержку многомерных массивов, матриц и эффективных функция для работы c этими типами данных. Быстродействие кода Python c использованием NumPy в 50 раз быстрее кода на “чистом” Python1 и сравнимо с быстродействием коммерческого пакета матричной алгебры MATLAB. 1 http://scipy.github.io/old-wiki/pages/PerformancePython
  • 3. Импорт модуля Вариант 1 import numpy v = numpy . array ( [ 1 , 2 ] ) Вариант 2 (рекомендуется) import numpy as np v = np . array ( [ 1 , 2 ] ) Вариант 3 from numpy import * v = array ( [ 1 , 2 ] )
  • 4. array 1 import numpy as np 2 a = np . array ( [ [ 1 , 2 , 3] , [4 , 5 , 6 ] ] ) Свойства Размерность массива 1 >>> a . ndim 2 2 Размеры (по каждому измерению) 1 >>> a . shape 2 (2 , 3) Количество элементов (суммарное) 1 >>> a . size 2 6
  • 5. Тип данных массива 1 import numpy as np 2 a = np . array ( [ [ 1 , 2 , 3] , [4 , 5 , 6 ] ] ) 3 p r i n t ( a . dtype ) int64 1 a = np . array ( [ [ 1 . 0 , 2.0 , 3 . 0 ] , [ 4 . 0 , 5.0 , 6 . 0 ] ] ) 2 p r i n t ( a . dtype ) float64
  • 7. Генератор последовательностей arange( start, stop, step, dtype ) start: начальное значение stop: конечное значение (не включается в результат) step: шаг dtype: тип данных От минус 1.0 до 1.0 с шагом 0.2: 1 v = np . arange ( −1.0 , 1.0 , 0 . 2 ) 2 v array ( [ −1.00000000e+00 , −8.00000000e−01, −6.00000000e−01, −4.00000000e−01, −2.00000000e−01, −2.22044605e−16, 2.00000000e−01, 4.00000000e−01, 6.00000000e−01, 8.00000000e−01])
  • 8. Массив нулевых значений zeros( shape, dtype = float, order = ’C’ ) shape: размерность массива dtype: тип элементов массива order: порядок хранения элементов >>> np . zeros ( 5 ) array ( [ 0 . , 0 . , 0 . , 0 . , 0 . ] ) Матрица-столбец нулевых значений >>> np . zeros ( ( 2 , 1 ) ) array ( [ [ 0 . ] , [ 0 . ] ] )
  • 9. Массив единиц ones( shape, dtype = float, order = ’C’ ) shape: размерность массива dtype: тип элементов массива order: порядок хранения элементов >>> np . ones ( 5 ) array ( [ 1 . , 1 . , 1 . , 1 . , 1 . ] ) Матрица единиц >>> np . ones ( (3 , 2) ) array ( [ [ 1 . , 1 . ] , [ 1 . , 1 . ] , [ 1 . , 1 . ] ] )
  • 10. Сетка на заданном интервале linspace(start, stop, num=50, endpoint=True, retstep=False, ...) start: начальное значение stop: конечное значение num: количество элементов endpoint: если True, то последний элемент (end) включается в результат retstep: возвращать и вычисленное значение шага >>> np . linspace ( 0 . 0 , 2.0 , 4) array ( [ 0. , 0.66666667 , 1.33333333 , 2. ] ) Матрица единиц >>> np . linspace ( 0 . 0 , 2.0 , 4 , retstep = True ) ( array ( [ 0. , 0.66667 , 1.3333 , 2. ] ) , 0.66666)
  • 11. Функция от индексов массива 1 a = np . fromfunction ( lambda i , j : i == j , (3 , 3) ) 2 p r i n t ( a ) [ [ True , False , False ] , [ False , True , False ] , [ False , False , True ] ]
  • 12. Копирование Операция “присвоения” создает новую ссылку (псевдоним) на объект в памяти: 1 a = np . array ( [ [1 , 2] , [3 , 4] ] ) 2 b = a 3 p r i n t ( b i s a ) True Для создания копии массива используется метод copy(): 3 b = a . copy ( ) 4 p r i n t ( b i s a ) False
  • 14. Изменение размерности Функция reshape изменяет размерность массива, не меняя сами данные (новый “взгляд” на массив) 1 a = np . arange ( 6 ) 2 p r i n t ( a ) [0 1 2 3 4 5] 3 b = np . reshape ( a , (3 , 2) ) 4 p r i n t ( b ) 5 b [ 0 , 0 ] = 9 6 p r i n t ( a ) [ [ 0 1] [2 3] [4 5 ] ] [9 1 2 3 4 5]
  • 15. Изменение размерности Одна из размерностей может быть равна “-1”. В этом случае эта размерность вычисляется: 1 a = np . reshape ( np . arange ( 6 ) , (3 , −1) ) 2 p r i n t ( a ) [ [ 0 1] [2 3] [4 5 ] ]
  • 16. Плоский список Преобразование многомерного массива в “плоский” список (стиль Си: order=’C’ по умолчанию): 3 b = np . reshape ( a , −1) 4 p r i n t ( b ) [0 , 1 , 2 , 3 , 4 , 5]
  • 17. Плоский список Преобразование многомерного массива в “плоский” список (стиль Фортран: order=’F’) 3 b = np . reshape ( a , −1 , order = ’ F ’ ) 4 p r i n t ( b ) [0 , 2 , 4 , 1 , 3 , 5]
  • 18. Формирование плоского списка: ravel Преобразование многомерного массива в “плоский” список (стиль Си: order=’C’ по умолчанию): 1 a = np . reshape ( np . arange ( 6 ) , (3 , −1) ) 2 p r i n t ( a ) [ [ 0 1] [2 3] [4 5 ] ] 3 b = np . ravel ( a ) 4 p r i n t ( b ) [0 1 2 3 4 5] 5 b = np . ravel ( a , order = ’ F ’ ) 6 p r i n t ( b ) [0 2 4 1 3 5]
  • 19. vstack: склейка строк 1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) 2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] ) 3 c = np . vstack ( ( a , b ) ) 4 p r i n t ( c ) [ [ 1 2] [3 4] [5 6] [7 8 ] ]
  • 20. hstack: склейка столбцов 1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) 2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] ) 3 c = np . hstack ( ( a , b ) ) 4 p r i n t ( c ) [ [ 1 2 5 6] [3 4 7 8 ] ]
  • 21. hsplit: разделение на части по горизонтали 1 a = np . f l o o r ( 10 * np . random . random ( (2 ,12) ) ) 2 p r i n t ( a ) [ [ 6. 9. 2. 8. 6. 8 . ] [ 2. 1. 6. 8. 8. 6 . ] ] 3 np . h s p l i t ( a , 3 ) [ array ( [ [ 6 . , 9 . ] , [ 2 . , 1 . ] ] ) , array ( [ [ 2 . , 8 . ] , [ 6 . , 8 . ] ] ) , array ( [ [ 6 . , 8 . ] , [ 8 . , 6 . ] ] ) ]
  • 22. vsplit: разделение на части вертикали 1 a = np . f l o o r ( 10*np . random . random ( ( 4 , 2 ) ) ) 2 p r i n t ( a ) [ [ 5. 6 . ] [ 1. 5 . ] [ 5. 6 . ] [ 4. 3 . ] ] 3 np . v s p l i t ( a , 2 ) [ array ( [ [ 5 . , 6 . ] , [ 1 . , 5 . ] ] ) , array ( [ [ 5 . , 6 . ] , [ 4 . , 3 . ] ] ) ]
  • 24. Арифметические операции Арифметические операции выполняются поэлементно 1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) 2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] ) 3 c = a + b 4 p r i n t ( c ) [ [ 6 8] [10 12]] 1 c = 2 * ( a + b ) 2 p r i n t ( c ) [[12 16] [20 24]]
  • 25. Математические функции 1 a = np . reshape ( np . arange ( 6 ) , (2 , −1) ) 2 p r i n t ( a ) [ [ 0 1 2] [3 4 5 ] ] Возведение в степень: 3 p r i n t ( np . power ( a , 2 ) ) [ [ 0 , 1 , 4] , [ 9 , 16 , 25]] 3 p r i n t ( np . power ( a , a ) ) [ [ 1 1 4] [ 27 256 3125]]
  • 26. Математические функции 1 a = np . reshape ( np . arange ( 6 ) , (2 , −1) ) 2 p r i n t ( a ) [ [ 0 1 2] [3 4 5 ] ] 3 p r i n t ( np . exp ( a ) ) [ [ 1. 2.71828183 7.3890561 ] [ 20.08553692 54.59815003 148.4131591 ] ] 3 p r i n t ( a / ( a +1) ) [ [ 0. 0.5 0.66666667] [ 0.75 0.8 0.83333333]]
  • 27. dot: скалярное произведение 1 a = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] ] ) 2 b = np . array ( [ [ 5 , 6 ] , [ 7 , 8 ] ] ) 3 4 c = np . dot ( a , b ) 5 6 p r i n t ( c ) [[19 22] [43 50]]
  • 29. Индексация 1 a = np . arange ( 8 ) **2 2 p r i n t ( a ) [ 0 1 4 9 16 25 36 49] Индексация начинается с нуля. Третий элемент массива имеет индекс “2”: 2 p r i n t ( a [ 2 ] ) 4
  • 30. Срезы 1 a = np . arange ( 8 ) **2 2 p r i n t ( a ) [ 0 1 4 9 16 25 36 49] [ Начальное значение: граница: шаг ] 3 p r i n t ( a [ 2 : 6 : 2 ] ) 4 , 16
  • 31. Многомерные массивы 1 a = np . reshape ( np . arange ( 8 ) ,(2 , −1) ) 2 p r i n t ( a ) [ [ 0 1 2 3] [4 5 6 7 ] ] 3 p r i n t ( a [ 0 , 1 ] ) 1 4 p r i n t ( a [ : , 1 ] ) [1 5] 5 p r i n t ( a [ : , 1 : 3 ] ) [ [ 1 2] [5 6 ] ]
  • 32. Многомерные массивы 1 a = np . reshape ( np . arange ( 8 ) ,(2 , −1) ) 2 p r i n t ( a ) [ [ 0 1 2 3] [4 5 6 7 ] ] Последняя строка 3 p r i n t ( a [ −1 ,:] ) [4 5 6 7] Второй столбец с конца 4 p r i n t ( a [: , −2] ) [2 6]
  • 33. Использование ... вместо : 1 a = np . array ( [ [ [ 0 , 1 , 2] , 2 [ 10 , 12 , 1 3 ] ] , 3 [[100 ,101 ,102] , 4 [110 ,112 ,113]]]) 5 p r i n t ( a . shape ) (2 , 2 , 3) 3 p r i n t ( a [ 1 , . . . ] ) [ [ 0 , 1 , 2] , [ 10 , 12 , 13]] 4 p r i n t ( a [ . . . , 2 ] ) [ [ 2 13] [102 113]]
  • 34. Массив, как итератор При использовании массивов в конструкциях типа for ... in, итерация выполняется только по первой размерности: 1 a = np . array ( [ [ [ 0 , 1 , 2] , 2 [ 10 , 12 , 1 3 ] ] , 3 [[100 ,101 ,102] , 4 [110 ,112 ,113]]]) 5 6 f o r row in a : 7 p r i n t ( ’ Element : ’ , row ) Element : [ [ 0 1 2] [10 12 13]] Element : [[100 101 102] [110 112 113]]
  • 35. Массив, как итератор Итерация по всем элементам (последовательно по каждой размерности): 1 a = np . array ( [ [ [ 0 , 1 , 2] , [ 10 , 12 , 1 3 ] ] , 2 [[100 ,101 ,102] , [110 ,112 ,113]]]) 3 f o r i in np . ravel ( a ) : 4 p r i n t ( ’ Element ’ , i ) Element 0 Element 1 Element 2 Element 10 . . . Element 101 Element 102 Element 110 Element 112 Element 113
  • 36. Индексация при помощи массива индексов 1 a = np . arange ( 6 ) *2 2 i = np . array ( [ 1 , 3 , 5 , 2 ] ) 3 4 p r i n t ( a [ i ] ) [ 2 6 10 4] 5 i = np . array ( [ [1 , 3] , [5 , 2] ] ) 6 7 p r i n t ( a [ i ] ) [ [ 2 6] [10 4 ] ]
  • 37. Индексация при помощи массива типа bool 1 a = np . arange ( 6 ) *2 2 p r i n t ( a ) [ 0 2 4 6 8 10] Булев массив (каждый элемент сравнивается с 4): 3 p r i n t ( a>4 ) [ False False False True True True ] Использование массива для извлечения элементов: 4 p r i n t ( a [ a >4] ) [ 6 8 10]
  • 39. min, max, sum 1 a = np . array ( [ [1 , 2] , [3 , 4] ] ) Минимальное значение всего массива 2 p r i n t ( a . min ( ) ) 1 Минимальные значения столбцов 3 p r i n t ( a . min ( axis =0) ) [1 2] Минимальные значения строк 4 p r i n t ( a . min ( axis =1) ) [1 3]
  • 40. min, max, sum 1 a = np . array ( [ [1 , 2] , [3 , 4] ] ) Сумма всех значений 2 p r i n t ( a . sum ( ) ) 10 Сумма строк 3 p r i n t ( a . sum ( axis =0) ) [4 6] Сумма столбцов 4 p r i n t ( a . sum ( axis =1) ) [3 7]
  • 41. Среднее значение 1 a = np . array ( [ [1 , 2] , [3 , 4] ] ) Среднее значение всех элементов 2 p r i n t ( a . mean ( ) ) 2.5 Среднее по первой размерности (в столбцах) 3 p r i n t ( a . mean ( axis =0) ) [ 2 . 3 . ] Среднее по второй размерности (в строках) 4 p r i n t ( a . mean ( axis =1) ) [ 1.5 3 . 5 ]
  • 43. Чтение массива из текстового файла File1.txt # Results 1 23 5 2 65 6 4 55 4 Прочитать значения из файла File1.txt в массив res 1 res = np . loadtxt ( ” f i l e 1 . t x t ” , de l i mi t e r = ” ” ) 2 p r i n t ( res ) [ [ 1. 23. 5 . ] [ 2. 65. 6 . ] [ 4. 55. 4 . ] ]
  • 44. Чтение массива из файла: usecols File1.txt # Results 1 23 5 2 65 6 4 55 4 Прочитать значения из файла File1.txt в массив res столбцы с индексами 1 и 2: 1 res = np . loadtxt ( ” f i l e 1 . t x t ” , usecols = (1 , 2) ) 2 p r i n t ( res ) [ [ 23. 5 . ] [ 65. 6 . ] [ 55. 4 . ] ]
  • 45. Чтение массива из файла: skiprows File1.txt # Results 1 23 5 2 65 6 4 55 4 Прочитать значения из файла File1.txt в массив res, пропустив первые две строки 1 res = np . loadtxt ( ” f i l e 1 . t x t ” , skiprows = 2 ) 2 p r i n t ( res ) [ [ 2. 65. 6 . ] [ 4. 55. 4 . ] ]
  • 46. Запись массива в текстовый файл x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) ) table = np . hstack ( ( x , np . sin ( x ) ) ) np . savetxt ( ’ sin . t x t ’ , table , de l i m it e r = ’ , ’ ) Содержимое файла sin.txt 0.000000000000000000e+00 ,0.000000000000000000e+00 7.853981633974482790e−01,7.071067811865474617e−01 1.570796326794896558e+00 ,1.000000000000000000e+00 2.356194490192344837e+00 ,7.071067811865475727e−01 3.141592653589793116e+00 ,1.224646799147353207e−16
  • 47. Форматирование вывода x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) ) table = np . hstack ( ( x , np . sin ( x ) ) ) np . savetxt ( ’ sin . t x t ’ , table , fmt= ’ %7.4 f ’ ) Содержимое файла sin.txt 0.0000 0.0000 0.7854 0.7071 1.5708 1.0000 2.3562 0.7071 3.1416 0.0000
  • 48. Форматирование вывода x = np . linspace (0 , np . pi , 5) . reshape ( ( 5 , 1 ) ) table = np . hstack ( ( x , np . sin ( x ) ) ) np . savetxt ( ’ sin . t x t ’ , table , fmt = ’ %9.4g ’ , header = ’−−data s t a r t −− ’ , footer = ’−− data end −− ’ ) ) Содержимое файла sin.txt # −−data s t a r t −− 0 0 0.7854 0.7071 1.571 1 2.356 0.7071 3.142 1.225e−16 # −− data end −−
  • 49. Справка 1 Quickstart tutorial https://docs.scipy.org/doc/numpy-dev/user/quickstart.html 2 Numpy User Guide https://docs.scipy.org/doc/numpy/user/ 3 Numpy Reference Guide https://docs.scipy.org/doc/numpy/reference/