我想扫描类似于Tensorflow的tf.scan()
的矩阵,但是一次使用多行。因此,给定一个[n, m]
矩阵,我希望能够将m
行(带有n
元素)从i + j
到m
进行迭代,得到{{1} }形状为m - j
的切片。
如何实现?
我知道[i - j, n]
是如何做的,返回每次迭代的累加值。但是我不认为将矩阵作为多个输入来解决可以解决此问题,因为具有偏移量的值无法预先计算。
以tf.scan
和n = 3
为例,假设我有一个如下所示的矩阵:
m = 5
我想从第3行到第5行应用以下功能:
# [[1 0 0]
# [1 1 0]
# [0 0 0] row 3
# [0 0 0] row 4
# [0 0 0]] row 5
matrix_shape = [5, 3]
matrix_idx = tf.constant([[0, 0], [1, 0], [1, 1]])
matrix = tf.scatter_nd(matrix_idx,
tf.ones(tf.shape(matrix_idx)[0],
dtype=tf.int32),
matrix_shape)
Tensorflow是否具有特定于此问题的功能?
答案 0 :(得分:0)
我编写的以下代码完全符合我的要求。
这里的重要部分是return
使用的函数tf.scan
,它不仅返回当前的计算c
,而且还返回上一步{{1 }}。因此,重要的是稍后仅通过使用b
选择此列表中的后一个张量来从computation
中消除此多余量。
[1]
由于我仍然缺乏经验:该解决方案可能对性能不利,因为该函数返回一个元组,因此不使用Tensorflow的速度优化吗?