哪个函数增长得更快,指数(如2 ^ n,n ^ n,e ^ n等)或阶乘(n!)?Ps:我刚读到某个地方,n!增长快于2 ^ n.
我正在寻找一个直观的,现实世界的问题示例,该问题需要(最坏的情况)指数时间复杂度来解决我正在给出的谈话.
以下是我提出的其他时间复杂性的例子(其中许多来自这个SO问题):
有任何想法吗?
我正在上C++课,我注意到只有几个数学运算符可供使用.我还注意到C++在其数学库中没有指数运算符.
为什么必须总是为此写一个函数?C++的制造商是否有理由省略此运算符?
你如何将m提高到n的幂?我到处搜索过这个.我发现写m**n应该有效,但事实并非如此.我正在使用#!/ bin/sh
我的目标是简单地将诸如"1.2"的字符串转换为科学记数法而不增加额外的精度.问题是我总是在输出结束时得到多余的0.
>>> input = "1.2"
>>> print '{:e}'.format(float(input))
1.200000e+00
Run Code Online (Sandbox Code Playgroud)
我正在试图找出如何获得公正1.2e+00
.我意识到我可以在我的格式语句中指定精度,但我不想不必要地截断更长的字符串.我只是想压制训练0.
我尝试过使用Decimal.normalize(),它适用于所有情况,除了e <2.
>>> print Decimal("1.2000e+4").normalize()
1.2E+4
>>> print Decimal("1.2000e+1").normalize()
12
Run Code Online (Sandbox Code Playgroud)
所以这更好,除了我不想要12,我想要1.2e + 1.:P
任何建议将不胜感激!
编辑: 为了澄清,输入值已经适当地舍入到预定长度,现在是未知的.我试图避免重新计算适当的格式精度.
基本上,我可以输入值"1.23"和"1234.56",它应该是"1.23e + 0"和"1.23456e + 3".
我可能只需要检查输入字符串的长度并使用它来手动指定精度,但我想检查并确保我没有遗漏可以阻止指数格式任意添加0的东西.
我有一个数据框,我想对列中的行子集执行指数计算。我尝试了三个版本的代码,其中两个有效。但我不明白为什么一个版本给我这个错误。
import numpy as np
Run Code Online (Sandbox Code Playgroud)
版本 1(工作)
np.exp(test * 1.0)
Run Code Online (Sandbox Code Playgroud)
版本 2(工作)
np.exp(test.to_list())
Run Code Online (Sandbox Code Playgroud)
版本 3(错误)
np.exp(test)
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
AttributeError Traceback (most recent call last)
AttributeError: 'int' object has no attribute 'exp'
The above exception was the direct cause of the following exception:
TypeError Traceback (most recent call last)
<ipython-input-161-9d5afc93942c> in <module>()
----> 1 np.exp(pd_feature.loc[(pd_feature[col] > 0) & (pd_feature[col] < 700), col])
TypeError: loop of ufunc does not support argument 0 of type int which has no callable exp method
Run Code Online (Sandbox Code Playgroud)
测试数据通过以下方式生成:
test …
Run Code Online (Sandbox Code Playgroud) 我被分配了一些旧代码,当我阅读它时,我发现它有以下形式:
float low = 1e-9;
float high = 1e9;
float lowB = 1e-9;
float highB = 1e9;
float lowL = 1e-9;
float highL = 1e9;
Run Code Online (Sandbox Code Playgroud)
所以我看到它试图用e符号定义一些范围,对吗?但是不1e-9
应该是-1e9
?
然后价值将介于-1000000000
和之间1000000000
,对吗?
我不确定是什么1e-9
意思?
想象一下,我有一组x的测量值,这些测量值在时间t 0 ... t N被许多过程x 0 ... x N所取.假设在时间t我想基于我不知道的长期趋势的假设来估计x的当前值,并且可以从诸如指数平滑的算法预测x.由于我们有很多进程,N可以变得非常大,我不能存储多个值(例如以前的状态).
这里的一种方法是调整正常指数平滑算法.如果样品采取定期,我会保持一个估计Ÿ ñ这样的:
y n = α.y n-1 +(1 - α).X ñ
在采样不规则的情况下,这种方法并不是很好,因为许多样本在一起会产生不成比例的影响.因此,这个公式可以适用于:
ÿ Ñ = α Ñ.ý N-1 +(1 - α Ñ).X ñ
哪里
α Ñ = È -k(吨.ñ -吨N-1 )
IE根据前两个样本之间的间隔动态调整平滑常数.我很满意这种方法,似乎有效.这是这里给出的第一个答案,Eckner在2012年的论文(PDF)中给出了这些技术的一个很好的总结.
现在,我的问题如下.我想调整上述内容来估计发生率.偶尔会发生一个事件.使用类似的指数技术,我想估计事件发生的速率.
两个明显的策略是:
我在matlab中创建一个函数来计算以下函数:
对于这个功能,我们有:
这是我在matlab中实现的功能:
function [b]= exponential(e)
%b = ?
b= (exp (e) -1)/e;
Run Code Online (Sandbox Code Playgroud)
当我用非常小的值测试函数时,实际上函数的极限是1,但是当数字非常小(例如1*e-20)时,极限变为零?这种现象有什么解释?难道我做错了什么?.
x= 10e-1 , f (x)= 1.0517
x= 10e-5 , f (x)= 1.0000
x= 10e-10 , f (x)= 1.0000
x= 10e-20 , f (x)= 0
Run Code Online (Sandbox Code Playgroud) 看看代码吹响:
#include <complex>
#include <iostream>
int main()
{
std::cout << std::pow( std::complex<double>(0,0), std::complex<double>(0,0) ) << "\n";
std::cout << std::pow( std::complex<double>(0,0), double(0) ) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++(4.8.1)给出了输出
(nan,nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
而clang ++(3.3)给出了一个输出
(-nan,-nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
但我期待(1.0,0.0).
任何人都可以解释一下吗?