如何在每第二个位置之后将张量数组插入张量矩阵

时间:2019-09-23 07:31:20

标签: python tensorflow

我有张量数组 a 和张量矩阵 m 。现在,我想在从索引0开始以len( m )-2结尾的第二个位置之后,将 a 插入到 m 中。让我们用numpy和Plain python做一个等效的例子:

# define m
m = np.array([[3,7,6],[4,3,1],[8,4,2],[2,8,7]])
print(m)
#[[3 7 6]
# [4 3 1]
# [8 4 2]
# [2 8 7]]

# define a
a = np.array([1,2,3])
#[1 2 3]

# insert a into m
result = []
for i in range(len(m)):
    result.append(a)
    result.append(m[i])
print(np.array(result))
#[[1 2 3]
# [3 7 6]
# [1 2 3]
# [4 3 1]
# [1 2 3]
# [8 4 2]
# [1 2 3]
# [2 8 7]]

我正在寻找张量流的解决方案。我深信有一种解决方案不需要循环,但是我找不到。我希望有人可以帮我解决这个问题!

2 个答案:

答案 0 :(得分:0)

这应该有效,

np.ravel(np.column_stack((m, np.tile(a, (4, 1))))).reshape(8, 3)

有关想法,请参阅Interweaving two numpy arrays。应用此处描述的所有解决方案,然后重塑。

答案 1 :(得分:0)

您可以在矩阵的每一行的开头连接目标向量,然后对其进行整形。

import tensorflow as tf

initial_array = tf.constant([
    [3, 7, 6],
    [4, 3, 1],
    [8, 4, 2],
    [2, 8, 7],
])

vector_to_add = [1, 2, 3]
concat = tf.concat([[vector_to_add] * initial_array.shape[0], initial_array], axis=1)  # Concatenate vector_to_add to each vector of initial_array
output = tf.reshape(concat, (2 * initial_array.shape[0], initial_array.shape[1]))  # Reshape