Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

116
Views
How to use fn_map to map each row in an array C to its coresponding one in the array B

Since I am working with TensorFlow, I would like to know how to map my rows from a tensor C to the index of its corresponding row in matrix B.

Here is the code I wrote:


B= tf.constant([[ 0.,  5.,  2.],[ 0.,  0.,  0.], [ 0.,  0.,  3.],[1.,5.,6.],[2.,5.,7.]])

def embeding_to_index(a_vector):
    return np.where(np.all(a_vector==B,axis=1))[0].tolist()[0]


c = tf.constant([[0.,  0.,  3.],[2.,5.,7.]])
arr =  tf.map_fn(fn=embeding_to_index,elems=c)

My expected result is to get a tensor [2 4], where 2 refers to index of the vector [0., 0., 3.] in the rows of the tensor B, and 4 refers to the index of the vector [2.,5.,7.] in the rows of the tensor B.

I got the following error:

---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
<ipython-input-8-de82c21bac35> in <module>
     79 
     80 arr=tf.map_fn(fn=embeding_to_index,  # input & output have different dtypes
---> 81                     elems=c)
     82 # arr =  tf.vectorized_map(fn=embeding_to_index_,elems=U)

~\.conda\envs\test\lib\site-packages\tensorflow\python\ops\map_fn.py in map_fn(fn, elems, dtype, parallel_iterations, back_prop, swap_memory, infer_shape, name)
    266         back_prop=back_prop,
    267         swap_memory=swap_memory,
--> 268         maximum_iterations=n)
    269     results_flat = [r.stack() for r in r_a]
    270 

...

AxisError: axis 1 is out of bounds for array of dimension 0

How can I solve this issue using the TensorFlow library? Is there any alternative to the fn_map method in TensorFlow?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

You do not have to use tf.map_fn. Maybe try something like this:

import tensorflow as tf

B = tf.constant([[ 0., 5., 2.], [ 0., 0., 0.], [ 0., 0., 3.],[1.,5.,6.], [2.,5.,7.]])
c = tf.constant([[0., 0., 3.], [2.,5.,7.]])
c_shape = tf.shape(c)
b_shape = tf.shape(B)
c = tf.reshape(tf.tile(c, [1, b_shape[0]]), [c_shape[0], b_shape[0], c_shape[1]])
z = tf.where(tf.reduce_all(tf.equal(B, c), -1))
z = tf.stack([z[i, 1] for i in tf.range(tf.shape(z)[0])], axis=0)
print(z)
tf.Tensor([2 4], shape=(2,), dtype=int64)

Using:

c = tf.constant([[0., 0., 3.], [2.,5.,7.],[2.,5.,7.],[2.,5.,7.],[2.,5.,7.],[2.,5.,7.],[2.,5.,7.],[2.,5.,7.]])

You get:

tf.Tensor([2 4 4 4 4 4 4 4], shape=(8,), dtype=int64)

Update 1: If you want to use the indices in z to get the corresponding values in B, then just do this:

z, _ = tf.unique(z)
print(tf.gather(B, z))
tf.Tensor(
[[2. 5. 7.]
 [0. 0. 3.]], shape=(2, 3), dtype=float32)
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!