Reputation: 484
What would be the correct counterpart of the numpy
functions hstack
and vstack
in Tensorflow?
There is tf.stack
and tf.concat
in Tensorflow
, but i don't know how to use them or use the correct axis
value, to achieve the same behaviour in Tensorflow.
Upvotes: 5
Views: 5209
Reputation: 5064
You should use the tf.concat
with different axis
argument to get the same result as with hstack
or vstack
:
arr1 = np.random.random((2,3))
arr2 = np.random.random((2,3))
arr1
array([[0.72315241, 0.9374959 , 0.18808236],
[0.74153715, 0.85361367, 0.13258545]])
arr2
array([[0.80159933, 0.8123236 , 0.80555496],
[0.82570606, 0.4092662 , 0.69123989]])
np.hstack([arr1, arr2])
array([[0.72315241, 0.9374959 , 0.18808236, 0.80159933, 0.8123236 ,
0.80555496],
[0.74153715, 0.85361367, 0.13258545, 0.82570606, 0.4092662 ,
0.69123989]])
np.hstack([arr1, arr2]).shape
(2, 6)
np.vstack([arr1, arr2])
array([[0.72315241, 0.9374959 , 0.18808236],
[0.74153715, 0.85361367, 0.13258545],
[0.80159933, 0.8123236 , 0.80555496],
[0.82570606, 0.4092662 , 0.69123989]])
np.vstack([arr1, arr2]).shape
(4, 3)
t1 = tf.convert_to_tensor(arr1)
t2 = tf.convert_to_tensor(arr2)
tf.concat([t1, t2], axis=1)
<tf.Tensor: id=9, shape=(2, 6), dtype=float64, numpy=
array([[0.72315241, 0.9374959 , 0.18808236, 0.80159933, 0.8123236 ,
0.80555496],
[0.74153715, 0.85361367, 0.13258545, 0.82570606, 0.4092662 ,
0.69123989]])>
tf.concat([t1, t2], axis=1).shape.as_list()
[2, 6]
tf.concat([t1, t2], axis=0)
<tf.Tensor: id=19, shape=(4, 3), dtype=float64, numpy=
array([[0.72315241, 0.9374959 , 0.18808236],
[0.74153715, 0.85361367, 0.13258545],
[0.80159933, 0.8123236 , 0.80555496],
[0.82570606, 0.4092662 , 0.69123989]])>
tf.concat([t1, t2], axis=0).shape.as_list()
[4, 3]
You should use tf.stack
only if you want to concatenate tensors along a new axis:
tf.stack([t1, t2]).shape.as_list()
[2, 2, 3]
In other words, tf.stack
creates a new dimension and stacks the tensors along in.
Upvotes: 11