[英]How to calculate sums across matrix diagonals in Tensorflow?
说,我有矩阵4x4
像:
1 2 3 4
5 6 7 8
4 3 2 1
8 7 6 5`
我想用以下元素获得矩阵2*4-1
:
8
4+7
5+3+6
1+6+2+5
2+7+1
3+8
4
我怎样才能在 Tensorflow 中做到这一点? 当然,使用张量 - 我有形状为[a,b,c,..,l,n,n]
张量并且想要获得形状为[a,b,c,...,l,2*n-1]
[a,b,c,..,l,n,n]
张量[a,b,c,...,l,2*n-1]
。 是否有任何单一的功能可以做到这一点或循环是唯一的方法?
您可以使用tf.py_func
包装一个numpy
函数。
import tensorflow as tf
import numpy as np
def np_all_trace_sum(a):
n = a.shape[-1]
all_trace_sum = [a.trace(i,axis1=-1,axis2=-2) for i in range(n-1,-n,-1)] # shape = (2*n-1,a,b,c,..,l)
return np.moveaxis(all_trace_sum,0,-1) # shape = (a,b,c,..,l,2*n-1)
A = tf.placeholder(shape=[None,None,4,4],dtype=tf.float32)
result = tf.py_func(np_all_trace_sum, [A], tf.float32)
a = np.array([[1,2,3,4],[5,6,7,8],[4,3,2,1],[8,7,6,5]])
with tf.Session() as sess:
print(sess.run(result,feed_dict={A:[[a,a,a],[a,a,a]]}))
[[[ 8. 11. 14. 14. 10. 11. 4.]
[ 8. 11. 14. 14. 10. 11. 4.]
[ 8. 11. 14. 14. 10. 11. 4.]]
[[ 8. 11. 14. 14. 10. 11. 4.]
[ 8. 11. 14. 14. 10. 11. 4.]
[ 8. 11. 14. 14. 10. 11. 4.]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.