Тензор потока двух матриц пошагово умножить по оси = 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)
Другие вопросы по тегам