Search code examples
pythontensorflowtheanotheano.scan

How to apply scalar multiplication using elements of one tensor along the elements of another tensor?


Given two tensors, A (m x n x q) and B (m x n x 1), how do you create a function which loops through rows of A, treating each element of B (n x 1) as a scalar and applying them to the vectors (q x 1) of the sub-matrices of A (n x q)?

e.g., A is (6000, 1000, 300) shape. B is (6000, 1000, 1). Loop through 6000 "slices" of A, for each vector of the 1000 sub-matrices of A (, 1000, 300), apply scalar multiplication of each element from the vectors the sub-matrices of B (, 1000, 1).

My wording may be absolutely terrible. I will adjust the phrasing accordingly as issues arise.

Sidenote: I am working with Python, so Theano is probably the best to do this in?


Solution

  • Use tf.mul as follows:

    import tensorflow as tf
    a = tf.constant([[[1,2,1,2],[3,4,1,2],[5,6,10,12]],[[7,8,1,2],[9,10,1,1],[11,12,0,3]]])
    b= tf.constant([[[7],[8],[9]],[[1],[2],[3]]])
    res=tf.mul(a,b)
    sess=tf.Session()
    print(sess.run(res)) 
    

    which prints:

    [[[  7  14   7  14]
      [ 24  32   8  16]
      [ 45  54  90 108]]
    
     [[  7   8   1   2]
      [ 18  20   2   2]
      [ 33  36   0   9]]]