首页 > 编程语言 >Python+tensorflow计算整数阶乘的方法与局限性

Python+tensorflow计算整数阶乘的方法与局限性

时间:2023-06-09 20:05:25浏览次数:42  
标签:24 sess start Python tf 阶乘 tensorflow op


本文代码主要演示tensorflow的基本用法。

import tensorflow as

# 创建变量,保存计算结果
 start = tf.Variable(1, dtype=tf.int64)
# 初始化变量的op
 init_op = tf.global_variables_initializer()
# 启用默认图
with tf.Session() as sess:
     # 初始化变量
     sess.run(init_op)# 执行计算
     for i  in range(2, 31):
         # 创建常量
         t = tf.constant(i,dtype=tf.int64)
         # 创建乘法的op和重新赋值的op
         new_value = tf.mul(start, t)
         update = tf.assign(start, new_value)
         # 执行计算
         sess.run(update)
         # 输出结果
         print(t.eval(),':',sess.run(start))


上面代码的运算结果为:

2 : 2
 3 : 6
 4 : 24
 5 : 120
 6 : 720
 7 : 5040
 8 : 40320
 9 : 362880
 10 : 3628800
 11 : 39916800
 12 : 479001600
 13 : 6227020800
 14 : 87178291200
 15 : 1307674368000
 16 : 20922789888000
 17 : 355687428096000
 18 : 6402373705728000
 19 : 121645100408832000
 20 : 2432902008176640000
 21 : -4249290049419214848
 22 : -1250660718674968576
 23 : 8128291617894825984
 24 : -7835185981329244160
 25 : 7034535277573963776
 26 : -1569523520172457984
 27 : -5483646897237262336
 28 : -5968160532966932480
 29 : -7055958792655077376
 30 : -8764578968847253504


可以看出,当整数大于20之后,阶乘的计算结果就不对了,这是因为tensorflow的变量类型和常量类型设置为tf.int64的原因,很遗憾似乎这已经是tensorflow的极限了,毕竟实现机制与Python并不一样,不能像Python一样表示任意大小的数字,如果把上面代码中的int64修改为float64固然可以表示更大的数字,但是由于浮点数精度问题会有很大的误差。下面的纯Python代码则不会有任何问题,当然还可以支持更大整数的阶乘,大家可以自行试验。

>>> import math
 >>> for i  in range(2, 31):
         print(i,':',math.factorial(i)) 
 2 : 2
 3 : 6
 4 : 24
 5 : 120
 6 : 720
 7 : 5040
 8 : 40320
 9 : 362880
 10 : 3628800
 11 : 39916800
 12 : 479001600
 13 : 6227020800
 14 : 87178291200
 15 : 1307674368000
 16 : 20922789888000
 17 : 355687428096000
 18 : 6402373705728000
 19 : 121645100408832000
 20 : 2432902008176640000
 21 : 51090942171709440000
 22 : 1124000727777607680000
 23 : 25852016738884976640000
 24 : 620448401733239439360000
 25 : 15511210043330985984000000
 26 : 403291461126605635584000000
 27 : 10888869450418352160768000000
 28 : 304888344611713860501504000000
 29 : 8841761993739701954543616000000
 30 : 265252859812191058636308480000000

标签:24,sess,start,Python,tf,阶乘,tensorflow,op
From: https://blog.51cto.com/u_9653244/6450962

相关文章

  • Python使用scipy进行多项式计算与符号计算
    本文代码主要演示如何使用poly1d进行多项式计算和符号计算。fromscipyimport>>>p1=poly1d([1,2,3,4])#输出结果中,第一行的数字为第二行对应位置项中x的指数>>>print(p1)321x+2x+3x+4#等价于p2=(x-1)(x-2)(x-3)(x-4)>>>p2=poly1d([1,2,3......
  • Python中else关键字的常见用法
    Python中的else常见用法有三:选择结构、循环结构和异常处理结构。(1)选择结构这应该是最常见的用法,与关键字if和elif组合来使用,用来说明条件不符合时应执行的代码块。(2)循环结构Python中的for循环和while循环都可以带else子句,如果循环是因为条件不再成立而自然结束时会执行else中的代码......
  • Python实现字符串与指定密钥循环异或加解密
    异或运算在很多密码学算法中都有不同程度的应用,其运算特定在于一个数和另一个数连续异或两次仍得到原来的数。在实际使用中,因为要加密的信息和所使用的密钥在大多数情况下是不等长的,所以经常需要循环使用密钥。defcrypt1(source,key):'''source是要加密或解密的字符串,key是......
  • 详解Python生成器函数和生成器对象的原理和用法
    包含yield语句的函数可以用来创建生成器对象,这样的函数也称生成器函数。yield语句与return语句的作用相似,都是用来从函数中返回值。与return语句不同的是,return语句一旦执行会立刻结束函数的运行,而每次执行到yield语句并返回一个值之后会暂停后面代码的执行,下次通过生成器对象的__n......
  • Python 3.6+Django开发入门小案例(自动变化的问候)完整步骤
    第一步:在命令提示符环境使用pipinstalldjango命令安装django第二步:在命令提示符环境使用pythondjango-admin.pystartprojectdjango_greeting命令创建网站django_greeting第三步:利用资源管理器在网站目录django_greeting中创建子文件夹templates,并在该子文件夹中创建文件gree......
  • Python批量提取PDF文件中的文本
    首先需要执行命令pipinstallpdfminer3k来安装处理PDF文件的扩展库。importosimportsysimporttimepdfs=(pdfsforpdfsinos.listdir('.')ifpdfs.endswith('.pdf'))forpdf1inpdfs:pdf=pdf1.replace('','_').replace('-......
  • 基于Python+tkinter+pygame的音乐播放器完整源码
    importosimporttkinterimporttkinter.filedialogimportrandomimporttimeimportthreadingimportpygamefolder=''defplay():#folder用来表示存放MP3音乐文件的文件夹globalfoldermusics=[folder+'\\'+musicfo......
  • 最优的素数判断代码(Python)是这样写出来的
    素数判断是个很经典的问题,各种语言的程序设计课程都会涉及到,按照素数定义(除了1和自身,素数没有其他因数)很容易写出下面的代码:defisPrime1(n):foriinrange(2,n):ifn%i==0:returnFalsereturnTrue功能完全没有问题,就是非常非常非常非常慢。......
  • Python代码覆盖性测试入门
    覆盖测试通过代码分析工具和跟踪钩子来判断哪些代码可执行以及哪些代码被执行了,是对单元测试的有效补充,可以用来判断测试的有效性。Python扩展库coverage可以实现对Python代码的覆盖测试,使用pip工具安装之后,可以使用命令“coveragerunfile.py”对Python程序file.py进行覆盖测试,然......
  • 改造Python中文拼音扩展库pypinyin补充自定义声母全过程
    问题要从昨天说起,应根球老师发给我一个代码问可能是啥原因,如下:该函数的第二个参数3含义为只保留声母,为啥“应”的声母丢了呢?因为当时正是课间休息,一会儿还要上课,没时间多想,感觉或许是lazy_pinyin()函数的问题,毕竟是个懒惰的函数嘛,于是告诉应老师试试其他函数。今天早上来教研室以后......