Краткий обзор математических пакетов NumPy и Scipy

Пакеты NumPy ( http://numpy.scipy.org ) и SciPy ( http://www.scipy.org) являются двумя наиболее известными расширениями языка Python для проведения научных расчетов.
Пакет Numpy включает модули для эффективной работы с многомерными массивами, матрицами, функции для генерации псевдослучайных чисел, функции, реализующие алгоритмы линейной алгебры, преобразование Фурье, возможности интеграции программ на языках С и Фортран.
Пакет SciPy базируется на пакете NumPy и расширяет его возможности. Например, включает модули для численного интегрирования, статистического анализа, решения обыкновенных дифференциальных уравнений, обработки сигналов и изображений, оптимизационные алгоритмы,… .
Далее рассмотрим подробнее некоторые возможности пакета NumPy.

NumPy добавляет в Python поддержку большого количества новых числовых типов: bool (True или False); int (целые числа, int32 или int64); int8 (целые цисла от -128 до 127); int16 (целые числа -32768 до 32767); int32 (целые числа от -2147483648 до 2147483647); int64 (целые числа от 9223372036854775808 до 9223372036854775807); uint8 (целые числа без знака от 0 до 255); uint16 (целые числа без знака 0 до 65535); uint32 (целые числа без знака 0 до 4294967295); uint64 (целые числа без знака 0 до 18446744073709551615); float (краткая форма для float64); float32 (вещественные числа одинарной точности); float64 (вещественные числа двойной точности ); complex (краткая форма для complex128); complex64 (комплексные числа, действительная и мнимая части представлены числами типа float32); complex128 (комплексные числа, действительная и мнимая части представлены числами типа float64).
Одним из основных объектов NumPy является ndarray. Он позволяет создавать многомерные массивы данных одного типа и выполнять операции над ними с большой скоростью. В отличие от последовательностей в Python, массивы в NumPy имеют фиксированный размер, элементы массива должны быть одного типа. К массивам можно применять различные математические операции, которые выполняются более эффективно, чем для последовательностей Python.

    >>> import numpy
    >>> a=numpy.array([1,2,3]) #массив целых чисел
    >>> print a
    [1 2 3]
    >>> b=numpy.array([1,2,3.0]) #массив действительных чисел
    >>> print b
    [ 1.  2.  3.]
    >>> c=numpy.array([1,2,3.0+2j]) #массив комплексных чисел
    >>> print c
    [ 1.+0.j  2.+0.j  3.+2.j]
    >>>


Размерность массива можно определить с помощью атрибута shape, тип элементов — с помощью dtype.

    >>> import numpy
    >>> d=numpy.array([[1,2,3],[3,4,5]])
    >>> print d
    [[1 2 3]
     [3 4 5]]
    >>> d.shape
    (2, 3)
    >>> d.dtype
    dtype('int32')
    >>> type(d)
    <type 'numpy.ndarray'>
    >>>

При создании массива можно явно указать тип его элементов

    >>> import numpy
    >>> e=numpy.array([[1,2,3],[3,4,5]],dtype=float)
    >>> e
    array([[ 1.,  2.,  3.],
           [ 3.,  4.,  5.]])
    >>>

В NumPy присутствуют встроенные функции для создания массивов специального вида.
Функция arange() возвращает массив чисел с увеличивающимися значениями.

    >>> import numpy
    >>> numpy.arange(10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> numpy.arange(1,10,2)
    array([1, 3, 5, 7, 9])
    >>> numpy.arange(1,10,2,dtype=float)
    array([ 1.,  3.,  5.,  7.,  9.])
    >>>

Функция linspace() возвращает массив из n элементов на заданном отрезке, с одинаковым расстоянием между элементами. По умолчанию n=50.

    >>> import numpy
    >>> numpy.linspace(0,5,3)
    array([ 0. ,  2.5,  5. ])
    >>> numpy.linspace(0,5,6)
    array([ 0.,  1.,  2.,  3.,  4.,  5.])
    >>>

Функция zeros() возвращает массив, состоящий из нулей.

    >>> import numpy
    >>> numpy.zeros((3,3))
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])
    >>> numpy.zeros((3,3),dtype=int)
    array([[0, 0, 0],
           [0, 0, 0],
           [0, 0, 0]])
    >>>

Функция ones() возвращает массив, состоящий из единиц.

    >>> import numpy
    >>> numpy.ones((3,3))
    array([[ 1.,  1.,  1.],
           [ 1.,  1.,  1.],
           [ 1.,  1.,  1.]])

Функция identity() возвращает массив, состоящий из единиц.

    >>> import numpy
    >>> numpy.identity(3)
    array([[ 1.,  0.,  0.],
           [ 0.,  1.,  0.],
           [ 0.,  0.,  1.]])
    >>>

Функция dot(a,b) возвращает произведение массивов, linalg.det(a) — вычисляет определитель массива a, linalg.inv(a) — возвращает обратную матрицу к матрице a, linalg.solve(a,b) — возвращает решение системы линейных алгебраических уравнений.
Для создания матриц в NumPy существует специальный класс matrix, унаследованный от ndarray. Объекты matrix всегда являются двумерными. Для создания объектов matrix можно использовать Matlab-подобный синтаксис (столбы разделяются пробелами, строки — ;). Вместо matrix можно использовать сокращение mat. В отличие от ndarray, произведение объектов matrix является обычным произведением матриц. Атрибут .T позволяют найти транспонированную матрицу, .I — обратную матрицу.

    >>> import numpy
    >>> a=numpy.matrix('1 0;0 1')
    >>> b=numpy.matrix('1 2;3 4')
    >>> a
    matrix([[1, 0],
            [0, 1]])
    >>> b
    matrix([[1, 2],
            [3, 4]])
    >>> a*b
    matrix([[1, 2],
            [3, 4]])
    >>> b.T
    matrix([[1, 3],
            [2, 4]])
    >>> b.I
    matrix([[-2. ,  1. ],
            [ 1.5, -0.5]])
    >>>

  • avatar
  • 0

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.