Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Библиотека вычислительной математики Numpy




Данная библиотека позволяет удобно реализовывать численные методы, строилась по образцу системы 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





Поделиться с друзьями:


Дата добавления: 2018-10-15; Мы поможем в написании ваших работ!; просмотров: 742 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если вы думаете, что на что-то способны, вы правы; если думаете, что у вас ничего не получится - вы тоже правы. © Генри Форд
==> читать все изречения...

2780 - | 2700 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.