Тензор потока двух матриц пошагово умножить по оси = 0, (M,k) * (M,l) -> (M,k*l)
У меня есть две матрицы, F(форма = (4000, 64)) и М (форма =(4000,9)), и хочу получить результат, который имеет форму = (4000,64*9)
я могу думать с за цикл с кодом ниже (идеально)
result = np.zeros(4000,64*9)
ind = 0
for i in range(64):
for j in range(9):
result[:,ind]= tf.muliply(F[:,i]),M[:,j])
ind += 1
но я знаю, что цикл не поддерживает тензор потока
Есть ли функция, которая выполняет ту же функцию, что и код выше?
редактировать)
Я пришел с идеей. F,M повторяют, чтобы сформировать (4000,64*9) [lik repmat в MATLAB] и поэлементно умножают. Не могли бы вы когда-нибудь иметь какие-либо другие идеи?
2 ответа
Решение
Вы могли бы использовать
tf.reshape(M[:,tf.newaxis,:] * F[...,tf.newaxis], [4000,-1])
Ты можешь использовать tf.matmul
если вы измените свои входы в F(shape = (4000, 64, 1))
а также M(shape=(4000,1, 9))
, Пример,
F = tf.Variable(tf.random_uniform(shape=(4000, 64, 1)))
M = tf.Variable(tf.random_uniform(shape=(4000, 1, 9)))
C = tf.matmul(F, M)
C = tf.reshape(C, (4000, -1))
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
print(C.eval().shape)
#Output: (4000, 576)