4.2 scipy.special与scipy.io

本章节介绍特殊功能包scipy.special与文件操作子包Scipy.io。

特殊功能包scipy.special

特殊包中可用的功能是通用功能,它遵循广播和自动阵列循环。看看一些最常用的特殊功能:

现在让我们简要地理解这些功能。

1. 立方根函数

此立方根函数的语法是 - scipy.special.cbrt(x),这将获取x中每个元素的立方根。

让我们看以下示例。

from scipy.special import cbrt res = cbrt([10, 27, 0.1254, 125]) print(res)

上述程序将生成以下输出。

[2.15443469 3.         0.50053277 5.        ]

2. 指数函数

指数函数的语法是 - scipy.special.exp10(x),这将计算10 ^ x

让我们看以下示例。

from scipy.special import exp10 res = exp10([2, 9]) print(res)

上述程序将生成以下输出。

[1.e+02 1.e+09]

3. 相对误差指数函数

该函数的语法是 - scipy.special.exprel(x),它生成相对误差指数,(exp(x) - 1) / x。

x接近零时,exp(x)接近1,因此exp(x)-1的数值计算可能遭受灾难性的精度损失。然后实现exprel(x)以避免精度损失,这在x接近零时发生。

看以下示例。

from scipy.special import exprel res = exprel([-0.25, -0.1, 0, 0.1, 0.25]) print(res)

上述程序将生成以下输出。

[0.88479687 0.95162582 1.         1.05170918 1.13610167]

4. 对数和指数函数

该函数的语法是 - scipy.special.logsumexp(x),它有助于计算输入元素的指数总和的对数。

让我们看以下示例。

from scipy.special import logsumexp import numpy as np a = np.arange(10) res = logsumexp(a) print(res)

上述程序将生成以下输出。

9.45862974442671

5. 兰伯特函数

该函数的语法是 - scipy.special.lambertw(x),它也被称为Lambert W函数。Lambert W函数的W(z)被定义为w * exp(w)的反函数。换句话说,对于任何复数z,W(z)的值使得z = W(z)* exp(W(z))。

Lambert W函数是一个具有无限多个分支的多值函数。每个分支给出方程z = w exp(w)的单独解。这里,分支由整数k索引。

让我们看以下示例。这里,Lambert W函数是w exp(w)的倒数。

import numpy as np from scipy.special import lambertw w = lambertw(1) print(w) print(w * np.exp(w))

上述程序将生成以下输出。

(0.5671432904097838+0j)
(1+0j)

6. 排列和组合

让我们分别讨论排列和组合,以便清楚地理解它们。

组合 - 组合函数的语法是 - scipy.special.comb(N,k)。让我们看以下示例。

from scipy.special import comb res = comb(10, 3, exact=False) print(res)

上述程序将生成以下输出。

120.0

计算的公式为(10*9*8)/(3*2*1) = 120,与输出结果一致。如果N<0或k<0,则返回0。

排列 - 组合函数的语法是 - scipy.special.perm(N,k)。N个事物的排列一次取k个,这也称为“部分排列”。

让我们看以下示例。

from scipy.special import perm res = perm(10, 3, exact = True) print(res)

上述程序将生成以下输出。

720

计算的公式为10*9*8 = 720,与输出结果一致。

7. 伽玛函数

对于自然数’n’,伽马函数通常被称为广义阶乘,因为z * gamma(z) = gamma(z + 1)和gamma(n + 1)= n!。

组合函数的语法是 - scipy.special.gamma(x)。N个事物的排列一次取k个,即N的k-排列。这也称为“部分排列”。

from scipy.special import gamma res = gamma([0, 0.5, 1, 4, 5]) print(res)

上述程序将生成以下输出。

[        inf  1.77245385  1.          6.         24.        ]

文件操作Scipy.io

Scipy.io(输入和输出)包提供了广泛的功能,可以处理不同格式的文件。其中一些格式是 -

1. 操作MATLAB文件文件的函数

编号 功能说明
1 loadmat加载MATLAB文件
2 savemat保存MATLAB文件
3 whosmat列出MATLAB文件中的变量

2. 保存与加载MATLAB文件

import scipy.io as sio import numpy as np # 保存到mat文件 vect = np.arange(10) data = {'vect': vect} print("保存到文件的数据:", data) sio.savemat('array.mat', data) # 加载mat文件 mat_file_content = sio.loadmat('array.mat') print("文件加载的数据", mat_file_content)

运行后输出如下:

保存到文件的数据: {'vect': array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])}
文件加载的数据 {'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Wed Apr 24 16:41:41 2019', '__version__': '1.0', '__globals__': [], 'vect': array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])}
[[0 1 2 3 4 5 6 7 8 9]]

我们可以看到数组以及Meta信息,同时可以看到在当前程序文件的目录位置有一个新建的’array.mat’文件。

3. 检查MATLAB文件的内容

如果我们想要检查MATLAB文件的内容而不将数据读入内存,请使用whosmat命令,如下所示。

import scipy.io as sio mat_file_content = sio.whosmat('array.mat') print(mat_file_content)

上述程序将生成以下输出。

[('vect', (1, 10), 'int64')]

若有疑问,欢迎联系作者(微信:lixu1770105)。