Can we get values of a tensor by indices in tensorflow? It means can we operate tensorflow tensor like python list. In this tutorial, we will discuss this topic.

## Python List

We can read, write and slice elements in a python list easily, here is an example:

>>> lx = [1, 2, 3, 4, 5] >>> lx[2] # read by index 3 >>> lx[2:] #slice [3, 4, 5] >>> lx[2]= 6 #write a new value >>> lx [1, 2, 6, 4, 5] >>>

Can we read, write and slice elements in a tensor in tensorflow?

## TensorFlow tensor operation

We will use some examples to show you this answer in tensorflow 1.10 and python 3.6.

You can check your tensorflow version.

Print TensorFlow Version for Beginners – TensorFlow Tutorial

### Read value by index

Look at this example:

import numpy as np import tensorflow as tf a = np.array(range(50)) aa = tf.convert_to_tensor(a, tf.float32) aa = tf.reshape(aa, [5,10]) a1 = aa[2] a2 = aa[2][2] print(a1) print(a2) init = tf.global_variables_initializer() init_local = tf.local_variables_initializer() with tf.Session() as sess: sess.run([init, init_local]) np.set_printoptions(precision=4, suppress=True) print(sess.run([a1, a2])

We have created a tensor with the shape 5 * 10, we will read two values form the indices are [2] and [2][2].

Run this code, we will get the result:

Tensor("strided_slice:0", shape=(10,), dtype=float32) Tensor("strided_slice_2:0", shape=(), dtype=float32) array([20., 21., 22., 23., 24., 25., 26., 27., 28., 29.], dtype=float32), 22.0

We can find we can read values from a tensor by its index. The data type is tensor strided_slice.

We also know that tf.nn.embedding_lookup() also allows us to read values from a tensor by its id. Here is the tutorial:

Understand tf.nn.embedding_lookup(): Pick Up Elements by Ids – TensorFlow Tutorial

We will compare them.

a4 = tf.nn.embedding_lookup(aa, 2) print(a4)

Run this code, we will get the ouput.

Tensor("embedding_lookup/Identity:0", shape=(10,), dtype=float32) array([20., 21., 22., 23., 24., 25., 26., 27., 28., 29.], dtype=float32)

The value of \(a4\) is the same to \(a1\), however, the data type of them are different.

### Slice a tensor by index

We can use index to slice a python list, can we slice a tensor by its index? Look at this example:

a3 = aa[1:] print(a3)

Run this code, we will get the result:

Tensor("strided_slice_3:0", shape=(4, 10), dtype=float32) array([[10., 11., 12., 13., 14., 15., 16., 17., 18., 19.], [20., 21., 22., 23., 24., 25., 26., 27., 28., 29.], [30., 31., 32., 33., 34., 35., 36., 37., 38., 39.], [40., 41., 42., 43., 44., 45., 46., 47., 48., 49.]], dtype=float32)

We can find: we can use tensor index to slice a tensor and we will get a tensorflow strided_slice object.

Meanwhile, we also can use tf.split() to split a tensor. Here is the tutorial:

TensorFlow tf.split(): Splits a Tensor into Sub Tensors – TensorFlow Tutorial

### Write tensorflow by index

Can we update value in a tensor by its index? We will use an example to explain it.

Look at this example:

d = aa[3][2] aa[2][2] = d

Run this code, we will get this error:

aa[2][2] = d

TypeError: ‘Tensor’ object does not support item assignment

It means we can not update the tensor value by its index.