从张量流中的向量构造成对矩阵

时间:2019-03-14 01:46:03

标签: python numpy tensorflow matrix

假设我有一个1 * 3向量[[1,3,5]](如果有,则为[1,3,5]之类的列表),如何生成9 * 2矩阵:[[1,1],[1,3],[1,5],[3,1],[3,3],[3,5],[5,1],[5,3],[5,5]]

新矩阵中的元素是原始矩阵中元素的成对组合。

另外,原始矩阵可以是零,例如[[0,1],[0,3],[0,5]]

该实现应推广到任何维度的向量。

非常感谢!

3 个答案:

答案 0 :(得分:1)

您可以使用#if (hasLogFile(Id))… 中的product

itertools

答案 1 :(得分:1)

您可以使用tf.meshgrid()tf.transpose()生成两个矩阵。然后重塑并连接它们。

import tensorflow as tf

a = tf.constant([[1,3,5]])

A,B=tf.meshgrid(a,tf.transpose(a))
result = tf.concat([tf.reshape(B,(-1,1)),tf.reshape(A,(-1,1))],axis=-1)

with tf.Session() as sess:
    print(sess.run(result))

[[1 1]
 [1 3]
 [1 5]
 [3 1]
 [3 3]
 [3 5]
 [5 1]
 [5 3]
 [5 5]]

答案 2 :(得分:0)

我也想出了一个类似于@giser_yugang的答案,但没有使用tf.meshgrid和tf.concat。

import tensorflow as tf 

inds = tf.constant([1,3,5])

num = tf.shape(inds)[0]
ind_flat_lower = tf.tile(inds,[num])
ind_mat = tf.reshape(ind_flat_lower,[num,num])
ind_flat_upper = tf.reshape(tf.transpose(ind_mat),[-1])
result = tf.transpose(tf.stack([ind_flat_upper,ind_flat_lower]))

with tf.Session() as sess:
    print(sess.run(result))


[[1 1]
 [1 3]
 [1 5]
 [3 1]
 [3 3]
 [3 5]
 [5 1]
 [5 3]
 [5 5]]