答案 0 :(得分:10)
试试这个:
def tf_diff_axis_0(a):
return a[1:]-a[:-1]
def tf_diff_axis_1(a):
return a[:,1:]-a[:,:-1]
检查:
import numpy as np
import tensorflow as tf
x0=np.arange(5)+np.zeros((5,5))
sess = tf.Session()
np.diff(x0, axis=0) == sess.run(tf_diff_axis_0(tf.constant(x0)))
np.diff(x0, axis=1) == sess.run(tf_diff_axis_1(tf.constant(x0)))
答案 1 :(得分:2)
我认为TensorFlow与numpy.diff相当,所以你必须实现它,这不应该是numpy.diff简单的切片和减法:
def diff(a, n=1, axis=-1):
'''(as implemented in NumPy v1.12.0)'''
if n == 0:
return a
if n < 0:
raise ValueError(
"order must be non-negative but got " + repr(n))
a = asanyarray(a)
nd = len(a.shape)
slice1 = [slice(None)]*nd
slice2 = [slice(None)]*nd
slice1[axis] = slice(1, None)
slice2[axis] = slice(None, -1)
slice1 = tuple(slice1)
slice2 = tuple(slice2)
if n > 1:
return diff(a[slice1]-a[slice2], n-1, axis=axis)
else:
return a[slice1]-a[slice2]
答案 2 :(得分:0)
从 Tensorflow 2.4 开始,您可以使用 tf.experimental.numpy.diff
。
请注意,存在不受支持的参数:prepend
和 append
。