python比matlab慢,为什么numpy的exp比Matlab慢?如何让它更快?

为了提高性能,特别是在大型数据集上,我们可以利用^{} module来实现这种超越函数-import numexpr as ne

b = ne.evaluate('exp(a)')

标杆管理

为了进行适当的基准测试,我将使用^{}和{a3}-

设置1

MATLAB软件:

^{pr2}$

相同大小数据集上的NumPy:In [417]: n=100*1000

...: a = np.random.uniform(size=n)

...:

In [418]: %timeit np.exp(a)

1000 loops, best of 3: 1.5 ms per loop

In [419]: %timeit ne.evaluate('exp(a)')

1000 loops, best of 3: 397 µs per loop

因此MATLAB : 1.3 m-sec

NumPy : 1.5 m-sec

Numexpr : 0.4 m-sec

设置2

MATLAB软件:>> a = rand([1000*10000,1]);

>> func = @() exp(a);

>> timeit(func)

ans =

0.0977 % That's 97 m-sec

纽比:In [412]: n=1000*10000

...: a = np.random.uniform(size=n)

...:

In [413]: %timeit np.exp(a)

10 loops, best of 3: 154 ms per loop

In [414]: %timeit ne.evaluate('exp(a)')

10 loops, best of 3: 36.5 ms per loop

因此MATLAB : 97 m-sec

NumPy : 154 m-sec

Numexpr : 36 m-sec

使用tic-toc进行适当的基准测试

这个问题中的基准测试的缺点是,我们在一个循环中得到了toc的运行时间,而这个循环没有运行足够的时间来给我们任何准确的时间。普遍接受的想法是toc经过的时间必须至少接近1秒标记。在

所以,有了这些修正,用tic-toc更精确的计时测试将是-tic

for i=1:1000,

b = exp(a);

end

t=toc;

timing = t./1000

这就产生了-timing =

0.0010

这与我们的1.3 m-sec和timeit很接近。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,这里我将以Python为例给出如何计算简单的一维数组的赫斯特指数。请注意,实际应用中可能需要使用专门库(如`hurstpy`)来进行准确和高效的计算: ```python from numpy import log, diff, mean, std from scipy.stats import linregress # 假设我们有一个一维数组叫做 EEG_signal # 这里假设你已经进行了预处理 EEG_signal = ... # 你需要填充实际的脑电信号数据 def calculate_hurst_index(signal): # 差分序列 signal_diff = diff(log(signal + 1)) # 计算均值和标准差 mean_diff = mean(signal_diff) std_diff = std(signal_diff) # 检查是否足够大以进行计算 if std_diff == 0 or len(signal_diff) < 3: return None # 自相关系数与延迟的对数关系 lags = range(1, len(signal_diff) // 2 + 1) corr_values = [mean(signal_diff[0:i] * signal_diff[i:]) for i in lags] corr_values_log = [log(corr / std_diff**2) for corr in corr_values] # 斜率估计(赫斯特指数) slope, _, _, _, _ = linregress(lags, corr_values_log) return -slope hurst_exp = calculate_hurst_index(EEG_signal) ``` 如果你想在MATLAB中做同样的事情,以下是代码示例: ```matlab % 假设你有一列名为 EEG_data 的向量 EEG_data = ... % 你需要填充实际的脑电信号数据 % 导入必要的库 import numpy as np import statsmodels.api as sm % 计算差分序列 diff_signal = diff(log(EEG_data + 1)); % 计算自相关函数并转换为对数形式 lags = (1:length(diff_signal))/length(diff_signal); corr_values = xcorr(diff_signal, 'coeff'); corr_values_log = log(corr_values ./ var(diff_signal)); % 斜率即为赫斯特指数 hurst_exp = -slope(sm.OLS(corr_values_log, lags).fit().params(1)); hurst_exp ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值