标签: exp

numpy.exp()究竟是做什么的?

我对np.exp()实际上做了什么非常困惑.在文档中它说:"计算输入数组中所有元素的指数." 我很困惑这究竟是什么意思.有人可以给我更多信息,甚至指出我正确的方向来了解更多信息.

python statistics numpy exp

62
推荐指数
3
解决办法
10万
查看次数

快速定点pow,log,exp和sqrt

我有一个固定点类(10.22),我需要一个pow,一个sqrt,一个exp和一个日志函数.

唉,我不知道从哪里开始.任何人都可以提供一些有用的文章的链接,或者,还没有给我提供一些代码?

我认为,一旦我有了exp函数,那么实现pow和sqrt变得相对容易.

pow(x,y)=> exp(y*log(x))sqrt(x)=> pow(x,0.5)

它只是那些我发现很难的exp和日志函数(好像我记得我的一些日志规则,我记不起其他的很多了).

据推测,顺便说一句,对于sqrt和pow也会有一个更快的方法,所以即使只是说使用上面概述的方法:)前面的任何指针都会受到赞赏:)

请注意:这是跨平台和纯C/C++代码,所以我不能使用任何汇编程序优化.

c c++ logarithm fixed-point exp

21
推荐指数
3
解决办法
2万
查看次数

使用numpy处理exp中的溢出

使用numpy,我有一个函数的定义:

def powellBadlyScaled(X):
    f1 = 10**4 * X[0] * X[1] - 1
    f2 = numpy.exp(-numpy.float(X[0])) + numpy.exp(-numpy.float(X[1])) - 1.0001
    return f1 + f2
Run Code Online (Sandbox Code Playgroud)

在优化例程中,此函数被评估了很多次.它经常引发异常:

RuntimeWarning: overflow encountered in exp
Run Code Online (Sandbox Code Playgroud)

我知道操作数不能存储在float的已分配空间中.但是我怎样才能克服这个问题呢?

python numpy overflow exp

21
推荐指数
2
解决办法
5万
查看次数

如何在python 2.7中使用"e"(欧拉数)和幂运算

我怎么能用x.append(1-e^(-value1^2/2*value2^2))python 2.7 编写?

我不知道如何使用电源操作器和e.

python math equation exp

21
推荐指数
4
解决办法
9万
查看次数

快速计算:可以提高准确性而不会损失太多性能?

我正在尝试快速的Exp(x)函数,这个函数之前在这个回答中描述了一个提高C#计算速度的SO问题:

public static double Exp(double x)
{
  var tmp = (long)(1512775 * x + 1072632447);
  return BitConverter.Int64BitsToDouble(tmp << 32);
}
Run Code Online (Sandbox Code Playgroud)

表达式使用一些IEEE浮点"技巧",主要用于神经集.该功能比常规Math.Exp(x)功能快约5倍.

不幸的是,相对于常规Math.Exp(x)函数,数值精度仅为-4% - + 2%,理想情况下,我希望精度至少在亚百分比范围内.

我已经绘制了近似和常规Exp函数之间的商,并且从图中可以看出,相对差异似乎以几乎恒定的频率重复.

快速和常规exp函数之间的商数

是否有可能利用这种规律性来进一步提高"快速exp"功能的准确性而不会显着降低计算速度,或者精度提高的计算开销是否会超过原始表达式的计算增益?

(作为旁注,我也尝试过在同一个SO问题中提出的替代方法之一,但这种方法在C#中似乎没有计算效率,至少在一般情况下并非如此.)

5月14日更新

根据@Adriano的要求,我现在已经执行了一个非常简单的基准测试.我已经使用每个替代exp函数对[-100,100]范围内的浮点值执行了1000万次计算.由于我感兴趣的值范围从-20到0,我还明确列出了x = -5处的函数值.结果如下:

      Math.Exp: 62.525 ms, exp(-5) = 0.00673794699908547
Empty function: 13.769 ms
     ExpNeural: 14.867 ms, exp(-5) = 0.00675211846828461
    ExpSeries8: 15.121 ms, exp(-5) = 0.00641270968867667
   ExpSeries16: 32.046 ms, exp(-5) = 0.00673666189488182
          exp1: 15.062 ms, exp(-5) = -12.3333325982094
          exp2: 15.090 …
Run Code Online (Sandbox Code Playgroud)

c# performance floating-accuracy exp

20
推荐指数
4
解决办法
1万
查看次数

为什么我的Visual C++ .exe项目构建创建.lib和.exp文件?

我有一个由3个项目组成的解决方案.一个是静态库,两个是基于控制台的.exe文件,它们依赖于此库并链接到该库.他们的设置似乎相同.我建立了其中一个:

1> ------ Build build:项目:masksample,配置:Debug Win32 ------
1>编译...
1> stdafx.cpp
1>编译...
1> masksample.cpp
1>编译显示资源...
1>链接...
1> LINK:C:\ Users\DarekSz\Praca\cci\Debug\masksample.exe未找到或未由最后一个增量链接构建; 执行完整链接
1>嵌入清单...
1>掩码样本 - 0错误,0警告
==========构建:1成功,0失败,1最新, 0跳过==========

然后我继续建造另一个:

1> ------ Build build:项目:calibsample,配置:Debug Win32 ------
1>编译...
1> stdafx.cpp
1>编译...
1> calibsample.cpp
1>编译显示资源...
1>链接...
1>链接:C:\ Users\DarekSz\Praca\cci\Debug\calibsample.exe未找到或未由最后一个增量链接构建; 执行完整链接
1>创建库C:\ Users\DarekSz\Praca\cci\Debug\calibsample.lib和对象C:\ Users\DarekSz\Praca\cci\Debug\calibsample.exp
1>嵌入清单...
1> calibsample - 0错误,0警告
==========构建:1成功,0失败,1最新,0跳过==========

为什么链接器这次会创建.lib和.exp文件?是否有一些选项可以打开和关闭我在不知情的情况下激活它?

linker visual-c++ exp

17
推荐指数
2
解决办法
2万
查看次数

我*不*想要函数exp的正确舍入

Debian系统上的C数学库的GCC实现显然符合(IEEE 754-2008)函数的实现,这意味着舍入应始终是正确的:exp

(来自维基百科)IEEE浮点标准保证加,减,乘,除,融合乘加,平方根和浮点余数将给出无限精度运算的正确舍入结果.对于更复杂的功能,1985年标准中没有给出这样的保证,它们通常只能在最后一点内准确到达.但是,2008标准保证符合要求的实现将给出正确的舍入结果,这些结果遵循主动舍入模式; 但是,函数的实现是可选的.

事实证明,我遇到了这个功能实际上阻碍的情况,因为exp函数的确切结果通常几乎恰好处于两个连续double值(1)之间的中间位置,然后程序进行了大量的进一步计算,失去了速度高达400(!):这实际上是对我的解释(不好问:-S)问题#43530011.

(1)更确切地说,当参数exp变为(2 k + 1)×2 -53,其中k为相当小的整数(例如242)时,就会发生这种情况.特别是,所涉及的计算pow (1. + x, 0.5)倾向于exp使用这样的参数进行调用x,其数量级为2 -44.

由于正确舍入的实现在某些情况下可能非常耗时,我想开发人员也会设计一种方法来获得稍微不那么精确的结果(例如,最多只有0.6 ULP或类似的东西)对于给定范围内的每个参数值(大致)有界限...(2)

......但是怎么做?

(2)我的意思是,我只是不希望像(2 k + 1)×2 -53这样的参数的某些特殊值比相同数量级的大多数值更耗时; 但是我当然不介意参数的某些特殊值是否更快,或者如果大参数(绝对值)需要更大的计算时间.

这是一个显示现象的最小程序:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>

int main (void)
 {
  int i;
  double a, c;
  c = 0;
  clock_t start = clock …
Run Code Online (Sandbox Code Playgroud)

c rounding ieee-754 exp libm

11
推荐指数
1
解决办法
330
查看次数

在MATLAB中加速exp(A*x)的分析方法

我需要f(x)=exp(A*x)反复计算一个微小的,可变的列向量x和一个巨大的,恒定的矩阵A(许多行,几列).换句话说,x很少,但A*x很多.我的问题维度是这样的,它A*x占用了与exp()部分一样多的运行时间.

除了泰勒展开,并预先计算值的范围exp(y)(假设已知的范围内y的值A*x),这是我没有设法大大加快(同时保持精度)就什么MATLAB是对自己做的,我考虑分析性地重述问题,以便能够预先计算某些值.

例如,我发现了 exp(A*x)_i = exp(\sum_j A_ij x_j) = \prod_j exp(A_ij x_j) = \prod_j exp(A_ij)^x_j

这将允许我预先计算exp(A)一次,但是循环中所需的取幂与原始exp()函数调用一样昂贵,并且必须另外执行乘法(\ prod).

我还有其他想法可以遵循,或者我可能错过了MATLAB中的解决方案吗?

编辑:更多细节

A尺寸为81的是26873856(是的,那是巨大的),所以x是81乘1. nnz(A) / numel(A)0.0012,nnz(A*x) / numel(A*x)0.0075.我已经使用稀疏矩阵来表示A,但稀疏矩阵的exp()不再稀疏.所以事实上,我存储x非稀疏和我计算的exp(full(A*x))结果是快/慢full(exp(A*x))(我认为无论A*x是非稀疏的,因为x是非稀疏的.)exp(full(A*sparse(x)))是一种稀疏的方法A*x,但速度较慢.甚至更慢的变体exp(A*sparse(x))(对于稀疏类型的非稀疏矩阵具有双倍的内存影响)和full(exp(A*sparse(x))(其再次产生非稀疏结果).

sx = sparse(x);
tic, …
Run Code Online (Sandbox Code Playgroud)

performance matlab simplify exp

8
推荐指数
1
解决办法
1496
查看次数

为什么自编的Rcpp矢量化数学函数比其基础对应物更快?

好的,我知道答案,但受到这个问题的启发,我想对以下内容得到一些好的看法:为什么下面的Rcpp练习是ca. 比内置的快15%(对于长向量)exp()?我们都知道Rcpp是R/C API的包装器,所以我们应该期待性能略差一些.

Rcpp::cppFunction("
   NumericVector exp2(NumericVector x) {
      NumericVector z = Rcpp::clone(x);
      int n = z.size();
      for (int i=0; i<n; ++i)
         z[i] = exp(z[i]);
      return z;
   }
")

library("microbenchmark")
x <- rcauchy(1000000)
microbenchmark(exp(x), exp2(x), unit="relative")
## Unit: relative
##     expr      min       lq   median       uq      max neval
##   exp(x) 1.159893 1.154143 1.155856 1.154482 0.926272   100
##  exp2(x) 1.000000 1.000000 1.000000 1.000000 1.000000   100
Run Code Online (Sandbox Code Playgroud)

r exp rcpp

8
推荐指数
2
解决办法
845
查看次数

如何在MATLAB中表示e ^( - t ^ 2)?

我是MATLAB的初学者,我需要代表e (-t 2).

我知道,例如,代表我使用的e xexp(x),我尝试了以下内容

1)tp = t ^ 2;/tp = t*t; X = EXP(-TP);

2)x = exp(-t ^ 2);

3)x = exp( - (t*t));

4)x = exp(-t)*exp(-t);

这样做的正确方法是什么?

matlab exp exponential

7
推荐指数
2
解决办法
16万
查看次数