我正在尝试使用非常简单的结构创建一个0 x 1的n-by-m矩阵:
[[1 0 0 0 0 0 0 ...],
[1 1 0 0 0 0 0 ...],
[1 1 1 0 0 0 0 ...],
[1 1 1 1 0 0 0 ...],
[0 1 1 1 1 0 0 ...],
[0 1 1 1 1 1 0 ...],
...
[... 0 0 0 1 1 1 1],
[... 0 0 0 0 1 1 1],
[... 0 0 0 0 0 1 1],
[... 0 0 0 0 0 0 1]]
但是,我不想开始编写循环,因为这可能是使用内置的东西实现的:A = tf.constant(???,shape(n,m))
请注意,在前3行之后,只需重复4个1,然后是m-3 0,直到最后3行。
所以我在思考重复重复的内容,但我不知道使用什么语法。
答案 0 :(得分:2)
您正在寻找tf.matrix_band_part()
。根据手册,它的功能是
将张量设置复制到每个最内层矩阵的中心带外的所有内容为零。
所以在你的情况下,你创建一个带有一个矩阵的矩阵,然后像这样采用一个4宽的波段:
tf.matrix_band_part( tf.ones( shape = ( 1, n, m ) ), 3, 0 )
经过测试的代码:
import tensorflow as tf
x = tf.ones( shape = ( 1, 9, 6 ) )
y = tf.matrix_band_part( x, 3, 0 )
with tf.Session() as sess:
res = sess.run( y )
print ( res )
输出:
[[[1。 0. 0. 0. 0. 0.]
[1。 1. 0. 0. 0. 0.]
[1。 1. 1. 0. 0. 0.]
[1。 1. 1. 1. 0. 0.]
[0。 1. 1. 1. 1. 0.]
[0。 0. 1. 1. 1. 1.]
[0。 0. 0 1. 1. 1. 1.] [0。 0. 0 1. 1. 1.] [0。 0. 0 0. 0 1.]]]