Tensorflow1 concat 二维张量与所有按行排列
Tensorflow1 concat 2D tensors with all row wise permutations
假设我们有两个形状为 (n, k
) 和 (n, k
) 的二维张量。我们想要将两个张量与所有行方向排列相结合,使得所得张量的形状为 (n, n, 2*k
).
示例,
A = [[a, b], [c, d]]; B = [[e, f], [g, h]]
生成的张量应该是:
[[[a, b, e, f], [a, b, g, h]], [[c, d, e, f], [c, d, g, h]]]
假设输入张量 A 和 B 具有非静态形状,因此我们不能使用 for 循环 tf.shape()
索引值。
感谢任何帮助。非常感谢。
试试这个方法:
A = np.array([['a', 'b'], ['c', 'd']])
B = np.array([['e', 'f'], ['g', 'h']])
C = np.array([np.concatenate((a, b), axis=0) for a in A for b in B])
你可以像这样轻松地将它转换为tensorflow
data =tf.convert_to_tensor(C, dtype=tf.string)
输出:
<tf.Tensor: shape=(4, 4), dtype=string, numpy=
array([[b'a', b'b', b'e', b'f'],
[b'a', b'b', b'g', b'h'],
[b'c', b'd', b'e', b'f'],
[b'c', b'd', b'g', b'h']], dtype=object)>
不确定列表理解部分是否对大数据最有效
使用tf.concat
with tf.repeat
and tf.tile
import tensorflow as tf
import numpy as np
# Input
A = tf.convert_to_tensor(np.array([['a', 'b'], ['c', 'd']]))
B = tf.convert_to_tensor(np.array([['e', 'f'], ['g', 'h']]))
# Repeat, tile and concat
C = tf.concat([tf.repeat(A, repeats=tf.shape(A)[-1], axis=0),
tf.tile(B, multiples=[tf.shape(A)[0], 1])],
axis=-1)
# Reshape to requested shape
C = tf.reshape(C, [tf.shape(A)[0], tf.shape(A)[0], -1])
print(C)
>>> <tf.Tensor: shape=(2, 2, 4), dtype=string, numpy=
>>> array([[[b'a', b'b', b'e', b'f'],
>>> [b'a', b'b', b'g', b'h']],
>>> [[b'c', b'd', b'e', b'f'],
>>> [b'c', b'd', b'g', b'h']]], dtype=object)>
假设我们有两个形状为 (n, k
) 和 (n, k
) 的二维张量。我们想要将两个张量与所有行方向排列相结合,使得所得张量的形状为 (n, n, 2*k
).
示例,
A = [[a, b], [c, d]]; B = [[e, f], [g, h]]
生成的张量应该是:
[[[a, b, e, f], [a, b, g, h]], [[c, d, e, f], [c, d, g, h]]]
假设输入张量 A 和 B 具有非静态形状,因此我们不能使用 for 循环 tf.shape()
索引值。
感谢任何帮助。非常感谢。
试试这个方法:
A = np.array([['a', 'b'], ['c', 'd']])
B = np.array([['e', 'f'], ['g', 'h']])
C = np.array([np.concatenate((a, b), axis=0) for a in A for b in B])
你可以像这样轻松地将它转换为tensorflow
data =tf.convert_to_tensor(C, dtype=tf.string)
输出:
<tf.Tensor: shape=(4, 4), dtype=string, numpy=
array([[b'a', b'b', b'e', b'f'],
[b'a', b'b', b'g', b'h'],
[b'c', b'd', b'e', b'f'],
[b'c', b'd', b'g', b'h']], dtype=object)>
不确定列表理解部分是否对大数据最有效
使用tf.concat
with tf.repeat
and tf.tile
import tensorflow as tf
import numpy as np
# Input
A = tf.convert_to_tensor(np.array([['a', 'b'], ['c', 'd']]))
B = tf.convert_to_tensor(np.array([['e', 'f'], ['g', 'h']]))
# Repeat, tile and concat
C = tf.concat([tf.repeat(A, repeats=tf.shape(A)[-1], axis=0),
tf.tile(B, multiples=[tf.shape(A)[0], 1])],
axis=-1)
# Reshape to requested shape
C = tf.reshape(C, [tf.shape(A)[0], tf.shape(A)[0], -1])
print(C)
>>> <tf.Tensor: shape=(2, 2, 4), dtype=string, numpy=
>>> array([[[b'a', b'b', b'e', b'f'],
>>> [b'a', b'b', b'g', b'h']],
>>> [[b'c', b'd', b'e', b'f'],
>>> [b'c', b'd', b'g', b'h']]], dtype=object)>