本章节介绍特殊功能包scipy.special与文件操作子包Scipy.io。
特殊包中可用的功能是通用功能,它遵循广播和自动阵列循环。看看一些最常用的特殊功能:
现在让我们简要地理解这些功能。
此立方根函数的语法是 - 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. ]
指数函数的语法是 - scipy.special.exp10(x),这将计算10 ^ x
。
让我们看以下示例。
from scipy.special import exp10
res = exp10([2, 9])
print(res)
上述程序将生成以下输出。
[1.e+02 1.e+09]
该函数的语法是 - 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]
该函数的语法是 - scipy.special.logsumexp(x),它有助于计算输入元素的指数总和的对数。
让我们看以下示例。
from scipy.special import logsumexp
import numpy as np
a = np.arange(10)
res = logsumexp(a)
print(res)
上述程序将生成以下输出。
9.45862974442671
该函数的语法是 - 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)
让我们分别讨论排列和组合,以便清楚地理解它们。
组合 - 组合函数的语法是 - 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
,与输出结果一致。
对于自然数’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(输入和输出)包提供了广泛的功能,可以处理不同格式的文件。其中一些格式是 -
编号 | 功能说明 |
---|---|
1 | loadmat加载MATLAB文件 |
2 | savemat保存MATLAB文件 |
3 | whosmat列出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’文件。
如果我们想要检查MATLAB文件的内容而不将数据读入内存,请使用whosmat命令,如下所示。
import scipy.io as sio
mat_file_content = sio.whosmat('array.mat')
print(mat_file_content)
上述程序将生成以下输出。
[('vect', (1, 10), 'int64')]
若有疑问,欢迎联系作者(微信:lixu1770105)。