在TensorFlow中

时间:2018-04-16 16:32:20

标签: python numpy tensorflow

我正在尝试使用非常简单的结构创建一个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行。

所以我在思考重复重复的内容,但我不知道使用什么语法。

1 个答案:

答案 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.]]]