假设我有一个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]]
。
该实现应推广到任何维度的向量。
非常感谢!
答案 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]]