由於我的英語尷尬,我的標題可能不明確。但是,我的意思是這樣的: 假設我有一個張量a
這樣的:如何取出(或切片)第一個元素是唯一的等級2張量中的元素?
array([[1, 2, 3],
[2, 2, 3],
[2, 2, 4],
[3, 2, 3],
[4, 2, 3]], dtype=int32)
這個張量的 '第一列中的' 可以包含重複的元素(例如,[1,2,2,3,4]或[ 1,1,2,3,3,4,5,5]),並且哪個元素是重複的,事先是未知的。
,我想帶出一個張這樣的:
array([[1, 2, 3],
[2, 2, 3],
[3, 2, 3],
[4, 2, 3]], dtype=int32)
就像你看到的,我拿出它的第一個元素是在a
列中的獨特元素的行。
我第一次想用的功能tf.unique()
。但它返回的idx
值並不表示輸出張量在原張量中的每個值的第一個索引。
tf.unique()
是這樣的:
# tensor 'x' is [1, 1, 2, 3, 3, 3, 7, 8, 8]
y, idx = tf.unique(x)
y ==> [1, 2, 3, 7, 8]
idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]
功能tf.unique(x, name=None)
發現在1-d張量的唯一元素。現在它返回兩個值:y
和idx
。 y
包含了所有排序在礦井相同順序發生在x
的x
的獨特元素。 idx
包含唯一輸出y
中每個值x
的索引。
我如何希望它有第三個返回值,其中包含原始張量x
中的每個值y
的第一個索引也是需要的。它可能像這樣工作:
# tensor 'x' is [1, 1, 2, 3, 3, 3, 7, 8, 8]
y, idx, idx_ori = tf.unique(x)
y ==> [1, 2, 3, 7, 8]
idx ==> [0, 0, 1, 2, 2, 2, 3, 4, 4]
idx_ori ==> [0, 2, 3, 6, 7]
就像它相當於在numpy的作用:
array 'x' is [1, 1, 2, 3, 3, 3, 7, 8, 8]
y, idx_ori = np.unique(x, return_index=True)
y ==> [1, 2, 3, 7, 8]
idx_ori ==> [0, 2, 3, 6, 7]
,如果我有這個idx_ori
,我可以通過tf.gather()
解決我的問題:
_, _1, idx_ori = tf.unique(a[:, 0])
result = tf.gather(a, idx_ori)
任何想法解決這個問題?或任何想法得到我想要的這個指標。
P.S.我知道我的描述是冗長...... :-P