我对TensorFlow很新。所以我在here的TensorFlow中遇到了这种不同类型的分裂。代码印在下面:
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]]
由于我是编程语言的菜鸟,我无法理解他们的一些文档,包括“计算分区python风格”等等。如果有人可以解释所有和实际方面之间的差异,我将不胜感激。
答案 0 :(得分:10)
tf.div - 执行python v2除法语义,例如如果两个参数都是整数,则使用整数除法(也称为“floor division”),如果参数是浮点数或复数,则使用正常的浮点除法。如果两个参数都是整数,则结果为整数,否则为float。
tf.truediv(7, 5)
# >>> 1.4
tf.truediv(-7, 5)
# >>> -1.4
tf.truediv(7.0, 5.0)
# >>> 1.4
tf.truediv - 强制执行python v3除法语义,例如如果两个参数都是整数,则首先将它们转换为float类型(文档网页指定将哪种类型的整数转换为哪种类型的float)然后应用正常的浮点除法:
x/y
tf.divide(x,y)本质上会调用/
,因此结果取决于tf.floor(tf.div(x,y))
运算符在执行除法的环境中的行为。
tf.floordiv和tf.floor_div返回与tf.div相同的结果,如果两个参数都是浮点数,则返回tf.floordiv(7, 5)
# >>> 1
tf.floordiv(-7, 5)
# >>> -2
tf.floordiv(7.0, 5.0)
# >>> 1.0
tf.floordiv(-7.0, 5.0)
# >>> -2.0
:
tf.truncatediv(7, 5)
# >>> 1
tf.truncatediv(-7, 5)
# UNLIKE tf.floordiv and tf.div
# >>> -1
tf.realdiv - 正常浮点除法,这是tf.truediv在转换其参数后调用的操作。
tf.truncatediv - 将除法结果舍入为零:
t = timer(0, 30000);
sub: Subscription;
initialize(): void {
this.sub = this.t.subscribe(() => this.refresh());
}
refreshTimer(): void {
this.sub.unsubscribe();
this.initialize();
}