假設我有一個I形狀為 (batch_size x N) 的張量,其中值是整數< max_indexes。
我想在不使用任何回圈的情況下創建一個A形狀為 (batch_size x max_indexes) 的張量,其中出現A[batch_num,i]的次數是.iI[batch_num]
例如 ( batch_size=3, N=4, max_indexes=9):
如果我有
>>> I
<tf.Tensor: shape=(3, 4), dtype=int32, numpy=
array([[2, 6, 5, 5],
[1, 2, 0, 3],
[4, 2, 1, 0]])>
我想
>>> A
<tf.Tensor: shape=(3, 9), dtype=int32, numpy=
array([[0, 0, 1, 0, 0, 2, 1, 0, 0],
[1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 1, 0, 0, 0, 0]])>
任何人有任何想法來解決這個問題?我已經使用 for 回圈* 做到了這一點,但這有點費時......
*對于回圈實作:
repeat_range = tf.transpose(tf.repeat([tf.range(max_indexes)],batch_size,0))
A = tf.zeros((batch_size,max_indexes))
for i in range(I.shape[1]):
A = tf.transpose(tf.cast(repeat_range == I[:,i],tf.float32))
uj5u.com熱心網友回復:
找到了答案!需要使用tf.math.bincount:
A = tf.math.bincount(I, axis=-1)
注意,如果你需要Abeing的第二個維度max_indexes,你可以像這樣填充:
A = tf.math.bincount(a, axis=-1, minlength=max_indexes, maxlength=max_indexes)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/411605.html
標籤:
