渐近数组上的求和

Summation over a sympy Array(渐近数组上的求和)
本文介绍了渐近数组上的求和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用ij这两个指数对Array(称为arr)求和。对arr[i]求和得到一个整数,如In [4]所示。但是,对arr[j]求和不会得到一个数字(请参见下面的In [5])。为什么会这样?
In [1]: from sympy import *

In [2]: i, j = symbols("i j", integer=True)

In [3]: arr = Array([1, 2])

In [4]: summation(
   ...:     arr[i],
   ...:     (j, 0, i), (i, 0, len(arr)-1)
   ...: )
Out[4]: 5

In [5]: summation(
   ...:     arr[j],
   ...:     (j, 0, i), (i, 0, len(arr)-1)
   ...: )
Out[5]: Sum([1, 2][j], (j, 0, i), (i, 0, 1))

推荐答案

如果出现以下情况,symPy将计算总和

  1. 求和数和的限制都是明确的;或者
  2. 它可以根据求和的公式找到求和的符号表达式。

嵌套求和是从左到右执行的。在第一版中,

summation(arr[i], (j, 0, i))
属于第2项:由于被和数不依赖于索引j,因此求和的值象征性地等于(i + 1)*arr[i]。则外和变为

summation((i + 1)*arr[i], (i, 0, len(arr)-1))

这属于第1项:求和和限制都是显式的。

但在第二个版本中

summation(arr[j], (j, 0, i))

既不适合1也不适合2。被加数依赖于j,我们没有关于它的任何公式(它只是一些数字[1,2]),求和的上限是象征性的。SymPy与这样的金额没有任何关系,因此它仍未完成。因此,由于未完成内部求和,因此外和不会到达任何位置。

解决方法

在第二种情况下,用Python sum替换外和会显式计算内和,因此会对其求值。

>>> sum([summation(arr[j], (j, 0, i)) for i in range(len(arr))])
4

当然,这并不真正使用SymPy的符号功能:内部和也可以是Python的sum

这篇关于渐近数组上的求和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)