J'ai R
comme matrices de rotation 2D de la forme (N,2,2)
. Maintenant, je souhaite étendre chaque matrice à (3,3)
matrices de rotation 3D, c'est-à-dire mettre des zéros dans chaque [:,:2,:2]
et mettre 1
à [:,2,2]
.Comment tamponner plusieurs tenseurs avec un autre sur la diagonale principale et des zéros ailleurs?
Comment faire cela en tensorflow?
MISE À JOUR
J'ai essayé cette façon
R = tf.get_variable(name='R', shape=np.shape(R_value), dtype=tf.float64,
initializer=tf.constant_initializer(R_value))
eye = tf.eye(np.shape(R_value)[1]+1)
right_column = eye[:2,2]
bottom_row = eye[2,:]
R = tf.concat([R, right_column], 3)
R = tf.concat([R, bottom_row], 2)
mais a échoué, parce que concat
ne fait pas la diffusion ...
MISE À JOUR 2
Je explicitées diffusion et également corrigé les mauvais indices dans concat
appels:
R = tf.get_variable(name='R', shape=np.shape(R_value), dtype=tf.float64,
initializer=tf.constant_initializer(R_value))
eye = tf.eye(np.shape(R_value)[1]+1, dtype=tf.float64)
right_column = eye[:2,2]
right_column = tf.expand_dims(right_column, 0)
right_column = tf.expand_dims(right_column, 2)
right_column = tf.tile(right_column, (np.shape(R_value)[0], 1, 1))
bottom_row = eye[2,:]
bottom_row = tf.expand_dims(bottom_row, 0)
bottom_row = tf.expand_dims(bottom_row, 0)
bottom_row = tf.tile(bottom_row, (np.shape(R_value)[0], 1, 1))
R = tf.concat([R, right_column], 2)
R = tf.concat([R, bottom_row], 1)
Les solutions semblent plutôt complexes. Y en a-t-il de plus simples?