Tensorflow源码分析–angle()
标签(空格分隔): Tensorflow
设输入为[x + y*j]返回角度值,该角度为aegtan(x,y),注意,返回的是角度值
import tensorflow as tf
x = tf.constant([1 + 10000j])
y = tf.constant([1])
z = tf.constant([1 + 1j])
sess = tf.Session()
print(sess.run(tf.angle(x)))#这里无限接近于直角,所以为90°,所以为1.57069633
print(sess.run(tf.angle(y))) # 这里接近0°,所以值为0
print(sess.run(tf.angle(z))) # 这里是45°所以返回的是 0.78539816
>>> [1.57069633]
[0]
[0.78539816]
源码:
def angle(input, name=None):
r"""Returns the element-wise argument of a complex (or real) tensor.
Given a tensor `input`, this operation returns a tensor of type `float` that
is the argument of each element in `input` considered as a complex number.
The elements in `input` are considered to be complex numbers of the form
\\(a + bj\\), where *a* is the real part and *b* is the imaginary part.
If `input` is real then *b* is zero by definition.
The argument returned by this function is of the form \\(atan2(b, a)\\).
If `input` is real, a tensor of all zeros is returned.
For example:
```
# tensor 'input' is [-2.25 + 4.75j, 3.25 + 5.75j]
tf.angle(input) ==> [2.0132, 1.056]
```
Args:
input: A `Tensor`. Must be one of the following types: `float`, `double`,
`complex64`, `complex128`.
name: A name for the operation (optional).
Returns:
A `Tensor` of type `float32` or `float64`.
"""
with ops.name_scope(name, "Angle", [input]) as name:
if input.dtype.is_complex:
return gen_math_ops.angle(input, Tout=input.dtype.real_dtype, name=name)
else:
return array_ops.zeros_like(input)