Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование.Python.8-10.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1.2 Mб
Скачать

Векторные функции

Кроме операций, о которых мы напомнили себе выше, существуют и другие, играющие существенную роль в математических приложениях и особенно в таких средах как Matlab, Octave, Python и R. Эти операции вы вряд ли найдете в книгах посвященных математике, они относятся исключительно к потребностям, возникающим при программировании массивов. Для каждого элемента вектора, его компоненты, мы можем сопоставить функцию одной переменной f, тогда мы можем получить и некоторую векторную функцию, в которой компонентами служат функции компонент. Например, у нас есть вектор v=(v0,…,vn−1). Тогда его векторная функция будет выглядеть как f(v)=(f(v0),…,f(vn−1)). Например, синус от v будет записан: sin(v)=(sin(v0),…,sin(vn−1)).

Векторное возведение в степень может означать: vb=(vb0,…,vbn−1). Особое векторное произведение ("asterix" multiplication) определяется как ′u∗v′=(u0v0,u1v1,…,un−1vn−1. В компьютерных вычислениях возможна и операция прибавления скаляра к вектору — число прибавляется к каждому элементу вектора. Возможны и сложные выражения, с которыми мы столкнемся далее.

Снова отметим, что эти функции чаще всего мало имеют отношения к обычной математике векторов, в которой то же складывание вектора и скаляра невозможно, а возведение вектора в квадрат даст число, его длину в квадрате. Эти функции работают поочередно с каждым элементом и результатом функции является уже вектор таких элементов. Такие функции позволяют значительно ускорить работу с массивами, производя одновременно одни и те же действия над всеми элементами.

Использование списков

Представим, у нас есть функция f(x) и мы хотим применить ее к n числам x1,x2,…,xn−1,xn. Мы можем составить n пар (xi,f(xi)), а можем создать два списка — один со значениями переменной, а другой с соответствующими значениями функции:

>>> def f(x): … return x**3 … >>> n = 5 # number of points along the x axis >>> dx = 1.0/(n-1) # spacing between x points in [0,1] >>> xlist = [i*dx for i in range(n)] >>> ylist = [f(x) for x in xlist] >>> pairs = [[x, y] for x, y in zip(xlist, ylist)]

Здесь для решения задачи мы использовали два приема: генерацию списков и двойной zip-проход по спискам. В списке pairs все элементы представляют собой списки из двух float чисел, в списках xlist и ylist все объекты float. Но список это довольно гибкий объект, и он может содержать объекты любых типов:

mylist = [2, 6.0, 'tmp.ps', [0,1]]

Также мы можем легко изменять, добавлять и удалять новые элементы из любого места списка. Эта гибкость списков делает их очень удобной для программистов, но в случае когда элементы однотипны и их число фиксировано, вместо списков используются массивы. Преимущества массивов в быстроте вычислений, меньшей занимаемой памяти и исключительно обширной математической поддержке таких данных. Поэтому массивы, как вы увидите в этом курсе, на практике (и в крупных математических пакетах) находят такое широкое применение. Списки отныне мы будем применять по назначению — когда нам будет нужно удалять и добавлять элементы и использовать в данных объекты различных типов.