在Tensorflow中创建三对角二维张量


红蜻蜓
2025-03-07 09:16:21 (19天前)
  1. 给定张量流中的三个1-D张量(即矢量),是否有一种聪明(有效)的方法通过将一个矢量放在子对角线上,另一个放在对角线上来制作三对角矩阵,最后......

2 条回复
  1. 0# My☀ | 2019-08-31 10-32



    这是一种方法


    tf.scatter_nd






    1. import tensorflow as tf

    2. def tridiagonal(diag, sub, sup):
      n = tf.shape(diag)[0]
      r = tf.range(n)
      ii = tf.concat([r, r[1:], r[:-1]], axis=0)
      jj = tf.concat([r, r[:-1], r[1:]], axis=0)
      idx = tf.stack([ii, jj], axis=1)
      values = tf.concat([diag, sub, sup], axis=0)
      return tf.scatter_nd(idx, values, [n, n])

    3. diag = tf.placeholder(tf.int32, [None])
      sub = tf.placeholder(tf.int32, [None])
      sup = tf.placeholder(tf.int32, [None])
      tri = tridiagonal(diag, sub, sup)
      with tf.Session() as sess:
      print(sess.run(tri, feed_dict={diag: [0, 1, 2, 3],
      sub: [4, 5, 6],
      sup: [7, 8, 9]}))

    4. </code>


    输出:




    1. [[0 7 0 0]
      [4 1 8 0]
      [0 5 2 9]
      [0 0 6 3]]

    2. </code>

登录 后才能参与评论