Модуль Numeric
также определяет константы e
(число e) и pi
(число пи).
Модуль LinearAlgebra
содержит алгоритмы линейной алгебры, в частности нахождение определителя матрицы, решений системы линейных уравнений, обращение матрицы, нахождение собственных чисел и собственных векторов матрицы, разложение матрицы на множители: Холецкого, сингулярное, метод наименьших квадратов.
Функция LinearAlgebra.determinant()
находит определитель матрицы:
>>> import Numeric, LinearAlgebra
>>> print LinearAlgebra.determinant(
... Numeric.array([[1, -2],
... [1, 5]]))
7
Функция LinearAlgebra.solve_linear_equations()
решает линейные уравнения вида ax=b
по заданным аргументам a
и b
:
>>> import Numeric, LinearAlgebra
>>> a = Numeric.array([[1.0, 2.0], [0.0, 1.0]])
>>> b = Numeric.array([1.2, 1.5])
>>> x = LinearAlgebra.solve_linear_equations(a, b)
>>> print "x =", x
x = [-1.8 1.5]
>>> print "Проверка:", Numeric.dot(a, x) - b
Проверка: [ 0. 0.]
Когда матрица a
имеет нулевой определитель, система имеет не единственное решение и возбуждается исключение LinearAlgebraError
:
>>> a = Numeric.array([[1.0, 2.0], [0.5, 1.0]])
>>> x = LinearAlgebra.solve_linear_equations(a, b)
Traceback (most recent call last):
File "", line 1, in ?
File "/usr/local/lib/python2.3/site–packages/Numeric/LinearAlgebra.py", line 98,
in solve_linear_equations raise LinAlgError, 'Singular matrix'
LinearAlgebra.LinAlgError: Singular matrix
Функция LinearAlgebra.inverse()
находит обратную матрицу. Однако не следует решать линейные уравнения с помощью LinearAlgebra.inverse()
умножением на обратную матрицу, так как она определена через LinearAlgebra.solve_linear_equations()
:
def inverse(a):
return solve_linear_equations(a, Numeric.identity(a.shape[0]))
Функция LinearAlgebra.eigenvalues()
находит собственные значения матрицы, а LinearAlgebra.eigenvectors()
— пару: собственные значения, собственные вектора:
>>> from Numeric import array, dot
>>> from LinearAlgebra import eigenvalues, eigenvectors
>>> a = array([[-5, 2], [2, — 7]])
>>> lmd = eigenvalues(a)
>>> print "Собственные значения:", lmd
Собственные значения: [-3.76393202–8.23606798]
>>> (lmd, v) = eigenvectors(a)
>>> print "Собственные вектора:"
Собственные вектора:
>>> print v
[[ 0.85065081 0.52573111]
[-0.52573111 0.85065081]]
>>> print "Проверка:", dot(a, v[0]) - v[0] * lmd[0]
Проверка: [ -4.44089210e–16 2.22044605e–16]
Проверка показывает, что тождество выполняется с достаточно большой точностью (числа совсем маленькие, практически нули): собственные числа и векторы найдены верно.
В этом модуле собраны функции для генерации массивов случайных чисел различных распределений и свойств. Их можно применять для математического моделирования.
Функция RandomArray.random()
создает массивы из псевдослучайных чисел, равномерно распределенных в интервале (0, 1)
:
>>> import RandomArray
>>> print RandomArray.random(10) # массив из 10 псевдослучайных чисел
[ 0.28374212 0.19260929 0.07045474 0.30547682 0.10842083 0.14049676
0.01347435 0.37043894 0.47362471 0.37673479]
>>> print RandomArray.random([3,3]) # массив 3x3 из псевдослучайных чисел
[[ 0.53493741 0.44636754 0.20466961]
[ 0.8911635 0.03570878 0.00965272]
[ 0.78490953 0.20674807 0.23657821]]
Функция RandomArray.randint()
для получения массива равномерно распределенных чисел из заданного интервала и заданной формы:
>>> print RandomArray.randint(1, 10, [10])
[8 1 9 9 7 5 2 5 3 2]
>>> print RandomArray.randint(1, 10, [10])
[2 2 5 5 7 7 3 4 3 7]
Можно получать и случайные перестановки с помощью RandomArray.permutation()
:
>>> print RandomArray.permutation(6)
[4 0 1 3 2 5]
>>> print RandomArray.permutation(6)
[1 2 0 3 5 4]
Доступны и другие распределения для получения массива нормально распределенных величин с заданным средним и стандартным отклонением:
>>> print RandomArray.normal(0, 1, 30)
[-1.0944078 1.24862444 0.20415567 -0.74283403 0.72461408 -0.57834256
0.30957144 0.8682853 1.10942173 -0.39661118 1.33383882 1.54818618
0.18814971 0.89728773 -0.86146659 0.0184834 -1.46222591 -0.78427434
1.09295738 -1.09731364 1.34913492 -0.75001568 -0.11239344 2.73692131
-0.19881676 -0.49245331 1.54091263 -1.81212211 0.46522358 -0.08338884]
Следующая таблица приводит функции для других распределений:
Функция и ее аргументы |
Описание |
F(dfn, dfd, shape=[]) |
F–распределение |
beta(a, b, shape=[]) |
Бета–распределение |
binomial(trials, p, shape=[]) |
Биномиальное распределение |
chi_square(df, shape=[]) |
Распределение хи–квадрат |
exponential(mean, shape=[]) |
Экспоненциальное распределение |
gamma(a, r, shape=[]) |
Гамма–распределение |
multivariate_normal(mean, cov, shape=[]) |
Многомерное нормальное распределение |
negative_binomial(trials, p, shape=[]) |
Негативное биномиальное |
noncentral_F(dfn, dfd, nconc, shape=[]) |
Нецентральное F–распределение |
noncentral_chi_square(df, nconc, shape=[]) |
Нецентральное хи–квадрат распределение |
normal(mean, std, shape=[]) |
Нормальное распределение |
permutation(n) |
Случайная перестановка |
poisson(mean, shape=[]) |
Пуассоновское распределение |
randint(min, max=None, shape=[]) |
Случайное целое |
random(shape=[]) |
Равномерное распределение на интервале (0, 1) |
random_integers(max, min=1, shape=[]) |
Случайное целое |
standard_normal(shape=[]) |
Стандартное нормальное распределение |
uniform(min, max, shape=[]) |
Равномерное распределение |
Читать дальше
Конец ознакомительного отрывка
Купить книгу