假設我有一個這樣的張量。
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 方法做到這一點的任何想法?
uj5u.com熱心網友回復:
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]
uj5u.com熱心網友回復:
實作此功能的一種方法是:
diff = t1[1:] - t1[:-1]
jumps = tf.abs(diff) > 1
t2 = tf.math.cumsum(tf.cast(jumps, 'int32'))
t2 = tf.concat([[0], t2], 0)
我們首先取連續元素之間的差異,然后檢查絕對差異是否大于 1(在這種情況下,數字不相鄰)。這會產生一個陣列,在“跳躍”的地方為 True,在其他地方為 False。abs
確保[4, 5, 6, 1, 2]
正確處理跳轉到較低數字(即 )。如果您知道數字將一直在增加,您可以忽略它。
取這個陣列的累積和(轉換為整數型別)將提供一個陣列,其中不同的部分表示為整數。最后,由于取差值會使陣列的長度減一,我們在前面t2
加上 a 0
,因為第一個數字應該屬于第一部分。
一個小提示:這將數字減一(即[4, 5, 6, 5, 4]
)視為相鄰并將它們放在同一部分中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/482760.html
上一篇:當我匯入tensorflow時,輸出錯誤`ImportError:numpy.core.multiarrayfailedtoimport`