从张量生成数量递增的片段
Generate segments of increasing numbers from tensor
假设我有一个像这样的张量。
t1 = tf.constant([0,1,2,3,5,6,7,8,9,10,19,20,21,22,23,24])
我想把它分成几段,包含数字紧邻的组。预期的输出将是这样的:
t2 = [0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2]
知道如何使用 tensorflow 方法做到这一点吗?
import tensorflow as tf
t1 = tf.constant([0,1,2,3,5,6,7,8,9,10,19,20,21,22,23,24], dtype=tf.int32)
t2 = tf.roll(t1 - 1, shift=-1, axis=0)
output = tf.math.cumsum(tf.cast(t2 != t1, dtype=tf.int32), exclusive=True)
output # [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
实现此功能的一种方法如下:
diff = t1[1:] - t1[:-1]
jumps = tf.abs(diff) > 1
t2 = tf.math.cumsum(tf.cast(jumps, 'int32'))
t2 = tf.concat([[0], t2], 0)
我们首先取连续元素之间的差异,然后检查绝对差异是否大于一(在这种情况下数字不相邻)。这会产生一个数组,其中 'jumps' 处为 True,其他地方为 False。 abs
确保正确处理跳转到较低数字(即 [4, 5, 6, 1, 2]
)。如果你知道数字总是在增加,你可以省略它。
对该数组求和(转换为整数类型)将提供一个数组,其中不同部分表示为整数。最后,由于取差将数组的长度减一,我们在 t2
前面加上 0
,因为第一个数字应该属于第一部分。
一个小提示:这会将数字减一(即[4, 5, 6, 5, 4]
)视为相邻并将它们放在同一部分。
假设我有一个像这样的张量。
t1 = tf.constant([0,1,2,3,5,6,7,8,9,10,19,20,21,22,23,24])
我想把它分成几段,包含数字紧邻的组。预期的输出将是这样的:
t2 = [0,0,0,0,1,1,1,1,1,1,2,2,2,2,2,2]
知道如何使用 tensorflow 方法做到这一点吗?
import tensorflow as tf
t1 = tf.constant([0,1,2,3,5,6,7,8,9,10,19,20,21,22,23,24], dtype=tf.int32)
t2 = tf.roll(t1 - 1, shift=-1, axis=0)
output = tf.math.cumsum(tf.cast(t2 != t1, dtype=tf.int32), exclusive=True)
output # [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
实现此功能的一种方法如下:
diff = t1[1:] - t1[:-1]
jumps = tf.abs(diff) > 1
t2 = tf.math.cumsum(tf.cast(jumps, 'int32'))
t2 = tf.concat([[0], t2], 0)
我们首先取连续元素之间的差异,然后检查绝对差异是否大于一(在这种情况下数字不相邻)。这会产生一个数组,其中 'jumps' 处为 True,其他地方为 False。 abs
确保正确处理跳转到较低数字(即 [4, 5, 6, 1, 2]
)。如果你知道数字总是在增加,你可以省略它。
对该数组求和(转换为整数类型)将提供一个数组,其中不同部分表示为整数。最后,由于取差将数组的长度减一,我们在 t2
前面加上 0
,因为第一个数字应该属于第一部分。
一个小提示:这会将数字减一(即[4, 5, 6, 5, 4]
)视为相邻并将它们放在同一部分。