У меня есть такой тензор:
tf_docs = tf.constant([[0, 2, 1],
[1, 2, 2],
[2, 1, 3],
[5, 2, 2]], dtype=tf.int32)
Мне нужно умножить каждую строку на оставшиеся строки по элементам, а затем суммировать результат.
Когда закончим с первой строкой, мы будем делать со второй строкой и остальными строками и ...
Таким образом, результат будет таким: Это будет 4*4
, потому что мы имеем 4 строки
result_tf =[[0, 6, 5, 6 ],
[6, 0, 10, 13],
[5, 10, 3, 18],
[6, 13, 18, 0]]
Позвольте мне объяснить каждый элемент в result_tf
(матрица симметрична.
первая строка:
0*1 + 2*2 + 1*2 = 6
0*2 + 2*1 + 1*3 = 5
0*5 + 2*2 + 1*2 = 6
Вторая строка:
1*2 + 2*1 + 2*3 = 10
1*5 + 2*2 + 2*2 = 13
третий ряд:
2*5 + 1*2 + 3*2 = 18
Вот как я сформировал верхнюю часть матрицы.
тогда значения в диагонали:
(0,0)
не имеет co-occurred
ни в одном столбце, поэтому 0
(1,1)
не имеет co-occurred
ни в одном столбце, поэтому 0
(2,2)
имеет co-occurred 2
время во втором столбце и 1 time
в третьем столбце, поэтому 3
(3,3)
не произошло ни в одном столбце, поэтому 0
Мне кажется, что для решения этой проблемы требуется больше творчества, чем для знания методы. (Буквально здесь я вычисляю совместное вхождение по той же матрице, если вам известна концепция совместного вхождения)
Что я сделал:
Я могу сделать это легко с помощью для л oop. Но мне нужно закончить операцию tenorflow. И я не смог найти ничего похожего на эту проблему. Я также думал, что использовать команду collect, чтобы каждый раз получать указанные строки и объединять их. Но этот путь не является динамическим c, и мои строки и столбцы больше, чем это, поэтому это решение не будет осуществимо