You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow中各类除法算子的区别及实用场景解析

作为TensorFlow新手,刚碰到这些五花八门的除法函数确实容易头大——别慌,我结合你贴的代码示例,一个个给你掰扯清楚它们的区别和什么时候该用哪个:

首先先把你的代码整理成可运行的格式:

import tensorflow as tf

a = tf.constant([2, 2], name='a')
b = tf.constant([[0, 1], [2, 3]], name='b')

with tf.Session() as sess:
    print(sess.run(tf.div(b, a)))          # ⇒ [[0 0] [1 1]]
    print(sess.run(tf.divide(b, a)))       # ⇒ [[0. 0.5] [1. 1.5]]
    print(sess.run(tf.truediv(b, a)))      # ⇒ [[0. 0.5] [1. 1.5]]
    print(sess.run(tf.floordiv(b, a)))     # ⇒ [[0 0] [1 1]]
    # print(sess.run(tf.realdiv(b, a)))    # ⇒ Error: only works for real values
    print(sess.run(tf.truncatediv(b, a)))  # ⇒ [[0 0] [1 1]]
    print(sess.run(tf.floor_div(b, a)))    # ⇒ [[0 0] [1 1]]

1. tf.div

这是TensorFlow早期的“元老级”除法函数,行为和Python 2的/一模一样:

  • 如果输入全是整数,就执行截断除法(直接砍掉小数部分,向零取整);如果有浮点数,就返回浮点结果。
  • 你示例里的输入都是整数,所以1/2得到0,3/2得到1,结果都是整数数组。
  • 注意:现在这个API已经被官方弃用了(TensorFlow 2.x里直接移除了),老代码里可能会见到,新代码别用它!

2. tf.divide

这就是文档里说的“Python风格除法”,完全对齐Python 3的/:

  • 不管输入是整数还是浮点数,都会返回浮点型的精确除法结果,老老实实保留小数部分。
  • 你示例里1/2得到0.5,3/2得到1.5,结果都是浮点数组。
  • 应用场景:绝大多数需要精确除法的场景都能用,比如计算平均值、比例、概率这类需要小数结果的任务,是TensorFlow 2.x里推荐的通用除法方式。

3. tf.truediv

和tf.divide几乎是双胞胎,同样返回浮点型精确除法结果:

  • 唯一区别是它要求输入类型必须一致(要么全是整数,要么全是浮点数),而tf.divide支持整数和浮点数混合输入。
  • 你示例里输入都是整数,所以输出和tf.divide完全一样。
  • 注意:TensorFlow 2.x里已经把它合并到tf.divide里了,新代码优先用tf.divide就行。

4. tf.floordiv / tf.floor_div

这俩是同一个函数的不同名字(tf.floor_div是更规范的新命名),执行地板除法:

  • 地板除法是向负无穷方向取整,而不是向零取整。你示例里都是正整数,所以和截断除法结果一样;但如果是负数,比如-3/2,地板除法会得到-2,而截断除法会得到-1。
  • 应用场景:需要明确向下取整的场景,比如把10个元素分成每份3个,需要得到3份(而不是4份),或者某些数学计算里必须遵循地板取整规则的时候。

5. tf.truncatediv

专门做整数截断除法的函数:

  • 只接受整数类型输入,返回也是整数,结果是向零方向取整(砍掉小数部分)。和tf.div在整数输入时的行为一样,但它的用途更明确。
  • 你示例里的结果和tf.div一致,但如果输入是负数,比如-3/2,会得到-1。
  • 应用场景:需要明确得到整数结果且截断小数的场景,比如计数、索引计算,避免不小心得到浮点数。

6. tf.realdiv

专门给**实数(浮点数)**用的除法函数:

  • 要求输入必须是浮点数类型,不能是整数,否则直接报错。它的作用是强制确保只对实数执行除法,避免整数除法的意外行为。
  • 你示例里输入是整数,所以报错;如果把a和b改成浮点型(比如tf.constant([2.0, 2.0])),就能得到和tf.divide一样的结果。
  • 应用场景:在一些严格要求实数运算的科学计算场景中使用,防止因为输入是整数而触发截断除法。

快速总结

  • 要精确浮点除法:用tf.divide(TensorFlow 2.x首选)
  • 要整数截断除法(向零取整):用tf.truncatediv
  • 要地板除法(向负无穷取整):用tf.floor_div
  • 老代码里的tf.div和tf.truediv建议逐步替换成上面的新函数

内容的提问来源于stack exchange,提问作者DuttaA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:03:07