通过缩放器将2D张量的某些列相乘

时间:2017-11-09 02:59:11

标签: tensorflow

他们是否使用tf函数通过缩放器将2D张量的某些列相乘?

e.g。将矩阵的第二列和第三列乘以2:

[[2,3,4,5],[4,3,4,3]] - > [[2,6,8,5],[4,6,8,3]]

感谢您的帮助。

编辑:

谢谢Psidom的回复。不幸的是我没有使用tf.Variable,所以我似乎必须使用tf.slice。

我想要做的是将除了DC分量和奈奎斯特频率分量之外的单面PSD的所有分量乘以2,以便在从双面频谱变为单个时保持总功率 - 频谱。

这对应于:2 * PSD [:,1:-1]如果它是一个numpy数组。

以下是我对tf.assign和tf.slice的尝试:

x ['PSD'] = tf.assign(tf.slice(x ['PSD'],[0,1],[tf.shape(x ['PSD'])[0],tf.shape (x ['PSD'])[1] - 2]),     tf.scalar_mul(2,tf.slice(x ['PSD'],[0,1],[tf.shape(x ['PSD'])[0],tf.shape(x ['PSD']) [1] - 2])))#单面功率谱密度。

然而: AttributeError:'Tensor'对象没有属性'assign'

2 个答案:

答案 0 :(得分:0)

如果张量是变量,您可以通过切片要更新的列然后使用tf.assign来完成此操作:

x = tf.Variable([[2,3,4,5],[4,3,4,3]])
x = tf.assign(x[:,1:3], x[:,1:3]*2)        # update the second and third columns and assign 
                                           # the new tensor to x   ​
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run(x))
#[[2 6 8 5]
# [4 6 8 3]]

答案 1 :(得分:0)

结束拍摄3个不同的切片并将它们连接在一起,中间切片乘以2.可能不是最有效的方法,但它有效:

x [' PSD'] = tf.concat([tf.slice(x [' PSD'],[0,0],[tf.shape(x [& #39; PSD'])[0],1]),     tf.scalar_mul(2,tf.slice(x [' PSD'],[0,1],[tf.shape(x [' PSD'])[0],tf .shape(x [' PSD'])[1] - 2])),     tf.slice(x [' PSD'],[0,tf.shape(x [' PSD'])[1] - 1],[tf.shape(x [& #39; PSD'])[0],1])],1)#单侧功率谱密度。