精华内容
下载资源
问答
  • 那很有趣。我可以说,问题是特定于np.matrix子类的。例如,以下操作正常:h = np.array(hamiltonian)unitary = [linalg.expm(-(1j)*t*h) for t in t_list]在回溯中再深入一点,在scipy.sparse.linalg.matfuncs.py中...

    那很有趣。我可以说,问题是特定于np.matrix子类的。例如,以下操作正常:h = np.array(hamiltonian)

    unitary = [linalg.expm(-(1j)*t*h) for t in t_list]

    在回溯中再深入一点,在scipy.sparse.linalg.matfuncs.py中的_fragment_2_1中引发了异常,特别是these lines:n = X.shape[0]

    diag_T = T.diagonal().copy()

    # Replace diag(X) by exp(2^-s diag(T)).

    scale = 2 ** -s

    exp_diag = np.exp(scale * diag_T)

    for k in range(n):

    X[k, k] = exp_diag[k]

    错误消息X[k, k] = exp_diag[k]

    TypeError: only length-1 arrays can be converted to Python scalars

    向我建议exp_diag[k]应该是标量,而是返回一个向量(并且不能将向量分配给X[k, k],这是标量)。

    设置断点并检查这些变量的形状可以确认这一点:ipdb> l

    751 # Replace diag(X) by exp(2^-s diag(T)).

    752 scale = 2 ** -s

    753 exp_diag = np.exp(scale * diag_T)

    754 for k in range(n):

    755 import ipdb; ipdb.set_trace() # breakpoint e86ebbd4 //

    --> 756 X[k, k] = exp_diag[k]

    757

    758 for i in range(s-1, -1, -1):

    759 X = X.dot(X)

    760

    761 # Replace diag(X) by exp(2^-i diag(T)).

    ipdb> exp_diag.shape

    (1, 4)

    ipdb> exp_diag[k].shape

    (1, 4)

    ipdb> X[k, k].shape

    ()

    潜在的问题是exp_diag假定为1D或列向量,但是np.matrix对象的对角线是行向量。这突出了一个更一般的观点,即np.matrix通常比np.ndarray不受支持,因此在大多数情况下最好使用后者。

    一种可能的解决方案是使用np.ravel()将diag_T展平为1D np.ndarray:diag_T = np.ravel(T.diagonal().copy())

    这似乎可以解决您遇到的问题,尽管可能还有其他与np.matrix相关的问题,但我还没有发现。

    我打开了一个拉取请求here。

    展开全文
  • 不管是啥语言都离不开加减乘除这些算法,但是在Python里面你知道这些符号代表什么运算吗?“/”这个是除法运算,那么这个“//”呢?“*”这个是乘法运算,那么这个“**”呢?下面来一一介绍下。“//”运算除法运算符...

    不管是啥语言都离不开加减乘除这些算法,但是在Python里面你知道这些符号代表什么运算吗?

    “/”这个是除法运算,那么这个“//”呢?“*”这个是乘法运算,那么这个“**”呢?下面来一一介绍下。

    “//”运算

    除法运算符是“/”,这个人人皆知道,但是这个二元运算符“/”求出来的结果都是取决于操作数本身的,比如:

    20 / 3

    6

    20 / 3.0

    6.666666666666667

    20.0 / 3

    6.666666666666667

    20.0 / 3.0

    6.666666666666667

    也就是说,使用“/”运算符时,只要有一个操作数是浮点数,那么产生的结果就是浮点数结果,我们称之为真除,但是要是两个操作数都是整型数的话,那么产生的结果就是一个舍小数位的整型数,这个我们称之为整除。但是如果有这一种情况,无论操作数是整型数、浮点数神马的,我要的结果都是整除,那么“//”就派上用场了,这个“//”就是来解决这个问题的。

    “//”是从Python2.2开始,除法运算符除了“/”之外,又引入了一个除法运算符,这一种运算符只用于进行整除法,示例如下:

    20 // 3

    6

    20 // 3.0

    6.0

    20.0 // 3

    6.0

    20.0 // 3.0

    6.0

    20 // 3.00

    6.0

    无论操作数如何,”//”的结果都是整除,如果操作数是浮点数的话,返回给我们的是一个整除结果转换成浮点数而已。

    “**”运算

    这个“**”比较简单,就是标题中的Python的幂运算了,演示如下:

    2 ** 0

    1

    2 ** 1

    2

    2 ** 10

    1024

    2 ** 20

    1048576

    第一操作数为底数,第二个操作数则为指数。

    完~

    展开全文
  • 研究了自然数和的表示公式,给出了其系数的一个递推关系式;利用递推关系式,得到和的各项系数,并由和公式的系数得到了计算Bernoulli数的几个计算公式
  • 一个自然数公式的推导,陆多俊,,本文从对递推关系求解的角度,推导出自然数和的组合数表达形式。为计算机求解和问题提供了方法和依据。
  • Python中幂运算可以使用**表示,Python中三次方可以表示为x**3,即为x的3次方。**是Python中算术运算符表示幂运算,Python中算术运算符还有加、减、乘、除、取模、取整除。运行示例:#!/usr/bin/python3a = 21b = 10...

    1857d306d5b5df7892840405240b6dad.jpg

    Python中幂运算可以使用**表示,Python中三次方可以表示为x**3,即为x的3次方。

    **是Python中算术运算符表示幂运算,Python中算术运算符还有加、减、乘、除、取模、取整除。

    运行示例:#!/usr/bin/python3

    a = 21

    b = 10

    c = 0

    c = a b

    print ("1 - c 的值为:", c)

    c = a - b

    print ("2 - c 的值为:", c)

    c = a * b

    print ("3 - c 的值为:", c)

    c = a / b

    print ("4 - c 的值为:", c)

    c = a % b

    print ("5 - c 的值为:", c)

    # 修改变量 a 、b 、c

    a = 2

    b = 3

    c = a**b

    print ("6 - c 的值为:", c)

    a = 10

    b = 5

    c = a//b

    print ("7 - c 的值为:", c)

    运行结果1 - c 的值为: 31

    2 - c 的值为: 11

    3 - c 的值为: 210

    4 - c 的值为: 2.1

    5 - c 的值为: 1

    6 - c 的值为: 8

    7 - c 的值为: 2

    更多Python相关技术文章,请访问Python教程栏目进行学习!

    以上就是python中计算三次方怎么表示的详细内容,更多请关注jquery中文网其它相关文章!

    本文原创发布jQuery中文网,转载请注明出处,感谢您的尊重!

    展开全文
  • 使用dis.dis(lambda x: x ** 2), 我们可以看到以下代码被执行: 该程序先加载 x, 再加载2,然后运行 BINARY_POWER 并返回计算结果。. BINARY_MULTIPLY 与 BINARY_POWER 使用math.pow()函数作为一个比较点,...

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

    最近,我在写一个算法来解决一个编码难题,这个难题涉及到在一个笛卡尔平面上找到一个与其他所有点的距离最小的点。在Python中,两个点之间的距离函数可以表示为math.sqrt(dx ** 2 + dy ** 2)。但是,这个函数中的每一项都有不同的表达方法:dx ** 2、 math.pow(dx, 2)和 dx * dx。有趣的是,它们的运行结果各不相同,我想知道它们是如何以及为什么会是这样的。

    计时测试

    Python提供了一个名为 timeit 的模块来测试性能,这使得测试这些表达式的运行时间相当简单。将 x 设置为 2,我们就可以对上面的三个选项进行计时测试:

    850097f5f4d34610ab987640870c14df.jpg

    表达式反汇编

    Python还提供了一个名为 dis 的模型,它可以对代码进行反汇编,这样我们就可以看到每一个表达式在底层做些什么,这有助于我们理解其性能差异。

    乘法

    使用 dis.dis(lambda x: x * x),我们可以看到以下代码被执行:

    cdc1c04ff74a4084a47a512ff7d4a7d9.jpg

    该程序将 x 载入两次,执行 BINARY_MULTIPLY 操作,并且返回得到的值。

    math.pow()

    使用 dis.dis(lambda x: math.pow(x, 2)), 我们可以看到以下代码被执行:

    b65d3834d6ae4a70931ed1ee894a5cc1.jpg

    math 模块从全局空间开始加载变量,然后加载pow属性。接下来,加载两个参数并调用pow函数,该函数会返回计算值。

    求幂

    使用dis.dis(lambda x: x ** 2), 我们可以看到以下代码被执行:

    1f6f70016ccf471baa26e5720fe8596c.jpg

    该程序先加载 x, 再加载2,然后运行 BINARY_POWER 并返回计算结果。.

    BINARY_MULTIPLY 与 BINARY_POWER

    使用math.pow()函数作为一个比较点,乘法和求幂的字节码的只有一部分有所不同: 调用BINARY_MULTIPLY 与调用BINARY_POWER。

    BINARY_MULTIPLY

    c91de21395b94edca7db2f750d2e1457.jpg

    对于较小的数,这个函数使用二进制乘法。对于较大的值,该函数使用Karatsuba乘法,这是一种针对较大数字的快速乘法算法。

    我们可以看到这个函数是如何在 ceval.c中被调用的:

    140741ca8fc341febd402038031345da.jpg

    BINARY_POWER

    源代码太长,所以无法完全包括进来,这在一定程度上解释了这种不利的性能。以下是一些有趣的代码片段:

    8be721732cac492682ca7a493bf26e63.jpg

    在创建了一些指针之后,该函数会检查power给出的数是浮点数还是负数,在这里它可能会出错,也可能会调用另一个函数来处理求幂操作。

    如果两种情况都不是,该函数将检查第三个参数,根据ceval.c的代码来看这个参数通常是None:

    1dce518005e2458c88f08b0e2b8c6aaf.jpg

    最后,该函数定义了两个例程: REDUCE用于模降,MULT用于乘法和减法。乘法函数对两个值使用了long_mul函数,这与BINARY_MULTIPLY中使用的函数相同。

    ead52f4ae9ca42b79c66866012772910.jpg

    之后,该函数使用《应用密码学手册》第14.6章中定义的从左到右k次求幂方法:

    d98819cdfef64d9fba234cc029279540.png

    图表化性能差异

    我们可以使用上面的timeit库分析在不同值时的代码,并查看性能如何随时间变化。

    生成函数

    为了测试不同power值下的性能,我们需要生成一些函数。

    math.pow()和取幂

    由于这两个函数都已经在Python源代码中,所以我们需要做的就是定义一个求幂函数,并且我们可以在一个timeit调用中来调用它。“

    d021ef655bd04bbaae1ca044aad92365.jpg

    连乘

    由于每一次power发生变化时,这个函数也会发生变化。所以每一次函数中的 base 发生变化时,我们都需要生成一个新的乘法函数。为此,我们可以生成一个像 x*x*x 这样的字符串,并对它调用eval()来返回一个函数:

    21ecc934230e46be9efd26e0d452300c.jpg

    这样,我们就可以像这样来创建一个 multiply 函数:

    d10e96f505a44eeca45073776feffd73.jpg

    如果我们调用 generate_mult_func(4), multiply函数将会是一个类似于这样的匿名函数:

    55c07a9345b14fc3bc6ef559a0561dbd.jpg

    查找交叉点

    使用这里(https://repl.it/@reagentx/Find-Crossover )贴出的代码,我们可以决定 multiply 在什么情况下会变得比 exponent 效率更低。

    我们先从这些值开始:

    261a5f0e315146d48bcce29f198b43ac.jpg

    我们持续循环,直到该函数执行100,000次 multiply 迭代的时间比执行100,000次 exponent 迭代的时间慢。首先,这里是计时时间,使用math.pow()作为一个比较点:

    b268992d17fc4eb7a9703863869e254b.jpg

    当我们在repl.it上运行时, Python在1.2s内找到了交叉点:

    f90c9d849c0e4aca89bb826682e7af69.jpg

    因此,在我们的表达式达到2^14时,连乘是运行最快的,而在到达2^15时, 求幂变成最快的。

    图表化性能

    使用Pandas, 我们可以跟踪每一次求幂的时间:

    311ce177a46f4f969937f1c7081739be.jpg

    使用下面的代码来生成一条折线图是非常简单的:

    a976937d5cac4d8bb316cdc38294ce54.jpg

    0ffbf5d0aef444b4866b51403f5456a2.png

    有趣的是, math.pow() 和 exponent 的大多数操作都是以相同的速率来执行的 ,而我们的multiply函数差异很大。不出所料,乘法链越长,执行所需的时间就越长。

    更多的性能测试

    虽然交叉很有趣,但这并没有显示幂大于15时的情况。幂上升到1000,我们得到以下趋势:

    32665bada1fe424f9d0cc8a3d55f6abd.png

    当我们放大以使math.pow()和exponent更明显时,我们看到它们有相同的性能趋势并仍在继续:

    eac349854fbb4040af51fccadc879b4e.png

    虽然使用 ** 时时间会逐渐增加,但是math.pow()通常是以相同的速度执行。

    结论

    当编写使用小指数的算法时,这里证明为幂小于15时,进行连乘比使用**指数运算符更快。此外,在幂大于5的情况下,math.pow()比连乘更有效,而且它总是比**操作符更有效,所以没有任何理由去使用**。

    此外,在JavaScript中也是如此。感谢@juliancoleman在这里(https://jsperf.com/mult-vs-expo 0做的这个比较!英文原文:https://chrissardegna.com/blog/posts/python-expontentiation-performance/

    译者:野生大熊猫

    展开全文
  • 例如:d = 2, n = 3, d的n次方为2**3 = 8分析:递归得方法:(1)n = 0,那么计算结果肯定为1(2)n = 1, 那么计算结果肯定为h(3)n > 0,首先计算2**(n/2)的值tmp,如果n为奇数,那么计算结果result = tmp * ...
  • //费马小定理降幂+快速 #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long LL; const int maxn=1e5+5; const int MD=1e...
  • 转载于:https://www.cnblogs.com/zxz666/p/10548379.html
  • 个人整理方公式(∑i^k 公式)

    千次阅读 2017-10-19 19:04:00
    有个Oier小学妹问了我一个Σi^k,i<=1e8 ,k<=1e6的问题,我认为这个用伯努利数列可能可以解决他的...计算∑{i=1,n}i^k 的值需要引入伯努利数列的概念 定义将(B-1)^k展开,然后将B^k写成数列的第k项,即B(k)...
  • 学生计算器是一款对于中学生是非常实用的计算器工具。软件界面简洁、无广告、内存小、永久免费,是一个专门为...计算器的操作方式比市面上的科学计算机更加智能化,在公式中移动光标,就可以修改计算公式,是非常...
  • 级数的定义,级数在近似计算,欧拉公式中的应用
  • 快速幂运算

    2019-07-08 16:59:44
    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定...快速这个东...
  • #include <stdio.h> const int mod = (int)1e9 + 7; const int maxn = (int)1e7 + 5; int main() { int n;...//计算a[n] a=b;//更新a[n-2] b=c;//更新a[n-1] } printf("%I64d\n", c); }
  • 快速幂运算 与 快速幂取余

    千次阅读 2017-09-19 20:00:46
    在很多情况下,我们队数据的处理的时候需要进行幂运算,但是如果进行n次的话时间复杂度是O(n), 可能会超时, 所以今天学习一种能够优化幂运算的算法 ------- 快速幂运算,能有效的将时间复杂度降低到O(log(n))...
  • 模取幂运算 计算a^b mod n

    千次阅读 2016-04-08 00:16:21
    结合快速求a^b%n问题 以及如下公式 a^b % n = (a%n)^b % n (a * b)%n = ( (a%n)*(b%n) ) % n #include using namespace std; #define ll long long ll ksm(ll a,ll b,ll n) { ll ans = 1; ll t = a%...
  • 运算公式整理

    2021-02-09 22:33:39
    整理ACM中常用的模运算公式,包括加减乘除、幂运算
  • 如果我们要求一个数x的n次,朴素的想法是让n个x相乘。对与n很大的情况,会造成一定的时间浪费。 这里讲解一下o(nlogn)的快速解法 我们考察a^11 次方。我们将它的用二进制形式表示(11转化为二进制是1011)...
  • 1、幂运算(整数幂和分数幂):幂 - 维基百科,...1.1 分数幂运算:1.2 幂运算的运算公式和法则1.3 次方根2、对数:2.1 对数的基本概念对数 - 维基百科,自由的百科全书https://zh.wikipedia.org/wiki/%E5%AF%B9%E6%...
  • 快速幂运算(入门完整版)

    千次阅读 2017-08-13 08:28:25
    在此给大家介绍一种能够非常高效的计算幂运算的快速幂运算算法——反复平方法。 Carmichael Number 我们把对任意的1 限制条件: 2 输入 17 输出 No(17是素数) 输入 561 输出 Yes 在这里mod,也可用%代替: mod...
  • (一)快速模板(整数快速幂计算x^N ) 举个栗子 十进制数 11 = 二进制数1011 3^11 = 3^1011 = 3^8 3^2 3^1 int QuickPow(int x,int N) { int res = x; //res表示当前底数 int ans = 1; //ans表示当前值 whlle...
  • 2.掌握有理数指数运算性质,会进行根式与分数指数的相互转化,灵活运用乘法公式幂运算法则进行有理数指数运算和化简.教学重点:分数指数的含义及有理数指数运算和化简.教学难点:分数指数...
  • C#幂运算

    千次阅读 2020-03-12 15:32:44
    C#求x的n次 Math.Pow(x,n);
  • 级数展开公式

    千次阅读 2018-08-20 09:25:46
  • 公式被誉为数学最奇妙的公式,它将5个基本数学常数用加法、乘法和幂运算联系起来。下面用SymPy验证一下这个公式。载入的符号中,E表示自然指数的底,I表示虚数单位,pi表示圆周率,因此上述的公式可以直接如下计算...
  • 在本文中,我们得到了由三个互素因子链所构成的集合S上的det(Sa)和det[Sa]的计算公式及证明,由此我们研究了这些矩阵的行列式的整除性。
  • 我说我做出了你敢信吗 你敢信,我自己都不敢信啊,真的 ... ,还好昨天学到一个公式: A^x = A^(x % Phi(C) + Phi(C)) (mod C) 至于证明那就请看AC大神的空间:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870b

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,134
精华内容 13,653
关键字:

幂的运算公式