Данная библиотека позволяет удобно реализовывать численные методы, строилась по образцу системы MathLab.
Традиционно при подключении этой библиотеке дают псевдоним np:
import numpy as np
Главным объектом библиотеки является массив numpy.array. В отличие от последовательностей в Python, массивы в NumPy имеют фиксированный размер, элементы массива должны быть одного типа.
Создание массивов
Создать массив можно с помощью простой операции преобразования типа из списка, последовательности, диапазона и других переменных итерируемых (перечисляемых) типов.
M=np.array(range(0,110,10))
Сократить запись примера выше можно с помощью специальной функции библиотеки NumPy arange(). Функция numpy.arange() является аналогом range(), но она создаёт не диапазон, а массив.
M=np.arange(0,110,10)
Во многих случаях удобнее функция numpy.linspace(), которая создаёт равномерно заполненный массив по начальному, конечному значениям и числу точек.
M=np.linspace(0,100,11)
Примечание: главное отличие linspace, что в результат входят не только начальная, но и конечная точки, что удобно при задании табличных функций. При этом число точек нужно указывать на одну больше, чем число интервалов. Например, нужно разбить диапазон от 0 до 360 градусов на интервалы длиной 10 градусов – интервалов получается 36, а точек 37.
Срезы в numpy
Объекты-массивы numpy используют расширенный синтаксис выделения среза. Следующие примеры иллюстрируют различные варианты записи срезов.
>>> import numpy as np # Подключаем библиотеку numpy и даём ей псевдоним np
>>>a = np.arange(24) + 1
>>>a.shape = (4, 6)
>>> print a # исходный массив
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
>>> print a[1,2] # элемент 1,2
9
>>> print a[1,:] # строка 1
[ 7 8 9 10 11 12]
>>> print a [1] # тожестрока 1
[ 7 8 9 10 11 12]
>>> print a[:,1] # столбец 1
[ 2 8 14 20]
>>> print a[-2,:] # предпоследняястрока
[13 14 15 16 17 18]
>>> print a[0:2,1:3] # окно 2x2
[[2 3]
[8 9]]
>>> print a[1,::3] # каждый третий элемент строки 1
[ 7 10]
>>> print a[:,::-1] # элементы строк в обратном порядке
[[ 6 5 4 3 2 1]
[12 11 10 9 8 7]
[18 17 16 15 14 13]
[24 23 22 21 20 19]]
Срез не копирует массив (как это имеет место со списками), а дает доступ к некоторой части массива. Далее в примере меняется на 0 каждый третий элемент строки 1:
>>> a[1,::3] = np.array([0,0])
>>> print a
[[ 1 2 3 4 5 6]
[ 0 8 9 0 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
Следующая таблица приводит описания функций модуля Numpy
Выборка элементов и обработка по условию
В библиотеке numpy есть операция select, но реализует она совсем не выбор элементов, а их условную обработку. Формат вызова:
numpy.select(condlist, choicelist, default=0)
Где condlist – список условий, choicelist – список преобразований, default – результат, если элемент ни одному из условий не соответствует. Пример:
import numpy as np
x = np.arange(10)
condlist = [x<3, x>5]
choicelist = [x, x**2]
print(np.select(condlist, choicelist))
print(np.select([x<3],[x]))
Для условного выбора элементов используется операция extract, смысл которой ясен из примера:
print(np.extract(x<3, x))
Сохранение в файл и чтение массивов в numpy
np.savetxt("test.txt", x)
np.savetxt("test2.txt", x, fmt="%2.3f", delimiter=",")
savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')
y = np.loadtxt("test.txt")
y = np.loadtxt("test2.txt", delimiter=",")
Библиотека numpy.linalg
Для задач линейной алгебры специально разработан тип
A = np.matrix([[1.,2], [3,4], [5,6]])
Матрицы отличаются от массивов тем, что операция умножения выполняется над ними как матричная, а не поэлементная, как для массивов.
Операция
np.rank(A)
возвращает размерность, а не ранг матрицы!
Решение системы линейных уравнений
A = np.array([[1,2],[3,4]])
b = np.array([10, 20])
x = np.linalg.solve(A,b)
Дифференцирование
xmax=10
N=101
x=np.linspace(0,xmax,N)
y=sin(x)
y1=(float(N)/xmax)*diff(y)
y2=(float(N)/xmax)**2*diff(y,2)
plot(x,y) plot(x[:-1],y1)
plot(x[:-2],y2)
grid()
Больше возможностей численной математики - scipy






