标签: exponential

最有效的方法来计算矩阵的每个元素的指数

我正在从Matlab迁移到C + GSL,我想知道什么是计算矩阵B的最有效方法:

B[i][j] = exp(A[i][j])
Run Code Online (Sandbox Code Playgroud)

其中i在[0,Ny]中,j在[0,Nx]中.

请注意,这与矩阵指数不同:

B = exp(A)
Run Code Online (Sandbox Code Playgroud)

这可以通过GSL(linalg.h)中的一些不稳定/不支持的代码来完成.

我刚刚找到了强力解决方案(几个'for'循环),但有没有更明智的方法呢?

编辑

来自Drew Hall的解决方案的结果

所有结果都来自1024x1024 for(for)循环,其中在每次迭代double中分配两个值(复数).时间是超过100次执行的平均时间.

  • 考虑{Row,Column} - 存储矩阵的主要模式时的结果:
    • 在Row-Major模式下循环内部循环中的行时为226.56 ms(情况1).
    • 在Row-Major模式下循环内循环中的列时为223.22 ms(情况2).
    • 使用gsl_matrix_complex_setGSL提供的功能时224.60 ms (案例3).

案例1的源代码:

for(i=0; i<Nx; i++)
{
    for(j=0; j<Ny; j++)
    {
        /* Operations to obtain c_value (including exponentiation) */
        matrix[2*(i*s_tda + j)] = GSL_REAL(c_value);
        matrix[2*(i*s_tda + j)+1] = GSL_IMAG(c_value);
    }
}
Run Code Online (Sandbox Code Playgroud)

案例2的源代码:

for(i=0; i<Nx; i++)
{
    for(j=0; j<Ny; j++)
    {
        /* Operations to …
Run Code Online (Sandbox Code Playgroud)

c performance matrix exponential

3
推荐指数
1
解决办法
2320
查看次数

显示6.5235375356299998e-07无指数表示法

我必须将指数字符串转换6.5235375356299998e-07为浮点值,并将计算结果显示为0.00000065235 ...如何在Python程序中执行此操作?

python floating-point exponential

3
推荐指数
1
解决办法
8026
查看次数

如何安排此计算以获得数值稳定性?

我正在尝试计算一个向量,其总和为 1,其元素定义如下:

v[i] = exp(tmp[i])/exp(tmp).sum()
Run Code Online (Sandbox Code Playgroud)

问题是指数中的值可能很大(在 -10^2 和 10^2 之间),使得指数计算结果为 inf 或 0。

我尝试了一些变体,例如用分子和分母减去最大元素或 tmp 的平均值,但这仍然不够。

基本上,我需要一种减少 tmp 中平均值和离散度的转换,或者对此计算的巧妙排序。

我使用 numpy 数组作为容器,exp 是 numpy.exp。

python numerical numpy stability exponential

3
推荐指数
1
解决办法
1201
查看次数

php中的指数移动平均线

我想计算 PHP 中的 EMA(指数移动平均线)值。

我试过下面的代码,但它给了我 500 错误。

$real = array(12,15,17,19,21,25,28,12,15,16);
$timePeriod = 3;
$data = trader_ema($real,$timePeriod);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)

PHP:EMA计算函数trader-ema

尝试了很长时间的谷歌搜索,但在 PHP 中没有得到任何帮助。所以,我不知道需要做什么来计算 EMA 值。

编辑 1:已安装的扩展

我已经安装了所有必要的扩展,现在我得到了输出。但它似乎没有给出适当的输出。

我认为用于计算 EMA 的 PHP 函数无法正常工作。在这方面的任何帮助将不胜感激。

php math weighted-average exponential

3
推荐指数
1
解决办法
3567
查看次数

Python:带有浮点数的任意精度

我尝试计算math.exp(9500)但遇到了OverflowError: math range error(大约是 6.3e4125)。从这个问题来看,似乎是由于浮点数太大,接受的答案是“(...) 稍微超出了双精度数的范围,因此会导致溢出”。

我知道Python可以处理任意大的整数(long类型),有没有办法以同样的方式处理任意大的浮点数?

编辑:我最初的问题是关于使用整数来计算 exp(n) 但正如 Eric Duminil 所说,最简单的方法是3**n不提供任何有用的结果。我知道意识到这个问题可能与这个问题类似。

python floating-point bignum exponential

3
推荐指数
1
解决办法
2141
查看次数

R:使用`(1 + 1/n)^ n`逼近`e = exp(1)`当`n`很大时给出荒谬的结果

所以,我只是在手动计算eR中的值,我发现有些东西对我来说有点令人不安.

e使用R exp()命令的价值......

exp(1)
#[1] 2.718282
Run Code Online (Sandbox Code Playgroud)

现在,我将尝试使用手动计算它 x = 10000

x <- 10000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718146
Run Code Online (Sandbox Code Playgroud)

不完全,但我们会尝试更接近使用 x = 100000

x <- 100000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.718268
Run Code Online (Sandbox Code Playgroud)

温暖但有点偏......

x <- 1000000
y <- (1 + (1 / x)) ^ x
y
#[1] 2.71828
Run Code Online (Sandbox Code Playgroud)

现在,让我们尝试一个巨大的

x <- 5000000000000000
y <- (1 + (1 / x)) ^ x
y
#[1] 3.035035 …
Run Code Online (Sandbox Code Playgroud)

r exponential

3
推荐指数
1
解决办法
108
查看次数

postgresql bigint 太大?

跑步

x86_64-pc-linux-gnu 上的 PostgreSQL 11.4 (Debian 11.4-1.pgdg90+1),由 gcc 编译 (Debian 6.3.0-18+deb9u1) 6.3.0 20170516,64 位

我尝试过这个声明:

SELECT CAST (2^63-1 as bigint);
Run Code Online (Sandbox Code Playgroud)

但收到意外的错误消息:

bigint 超出范围

奇怪的是,如果我只是用其等效的整数替换指数形式:

SELECT CAST (9223372036854775807 as bigint)
Run Code Online (Sandbox Code Playgroud)

它按预期工作。我想这只是我没有正确理解事情。FWIW我可以使用的指数表示法中的最大数字是这样的:

SELECT CAST (2^63-513 as bigint);
Run Code Online (Sandbox Code Playgroud)

任何更大的东西都会以同样的方式出错。

关于 PostgreSQL 如何求幂,我缺少什么?或者,它是否被转换为浮点数并返回,并且我看到舍入/截断错误?

postgresql exponential

3
推荐指数
1
解决办法
670
查看次数

Bash 取幂限制

我想了解$[a**b]在 Bash 中操作最大值的原因。

$ echo $[2**62]
4611686018427387904
$ echo $[2**63]
-9223372036854775808
$ echo $[2**64]
0
Run Code Online (Sandbox Code Playgroud)

bash exponential

3
推荐指数
1
解决办法
57
查看次数

如何在Java中找到整数中2的指数?

我想找到任何整数包含的 2 的幂。像 12 = 2*2*3所以答案应该是228 = 2*2*7所以答案应该是2等等。

int powerOf2InNumber = (int)Math.floor(Math.log(number) / Math.log(2));

我尝试了上面的代码,但在 28、26、10 等情况下,我得到了错误的答案。

java math exponential

3
推荐指数
1
解决办法
268
查看次数

O(3^n) 还是写成 O(2^n) 吗?

我想知道具有指数最坏时间复杂度的算法是否应该始终将其声明为 O(2^n)。例如,如果我有一个算法,对于输入大小的每一次增加,它的运算次数为三倍,我会将它的时间复杂度写为 O(3^n),还是仍将其归类为 O(2^n)。

任何正式的解释将不胜感激。

algorithm big-o computer-science time-complexity exponential

3
推荐指数
1
解决办法
133
查看次数