我的张量为let boundingBox = createdShape.frame //=SKShapeNode
for x in stride(from: Int(boundingBox.minX), to: Int(boundingBox.maxX), by: 10) {
// TODO: Use x here.
}
。我想得到这个张量的对角元素得到一个形状张量[100 X 16 X 16]
。我尝试了以下方法:
[100 X 16]
为#sum_cov
,[100 X 16 X 16]
预计为diagonal_elements
。
[100 X 16]
但是,我收到以下错误:
diagonal_elements = tf.diag_part(sum_cov)
有人可以告诉我如何实现这个目标吗?
答案 0 :(得分:0)
https://www.tensorflow.org/api_docs/python/tf/diag_part https://www.tensorflow.org/api_docs/python/tf/matrix_diag_part
dm0_是对的。你想要tf.matrix_diag_part
。
tf.diag_part
计算张量对角线,如果输入张量的形状为(D1, ..., Dk, D1, ..., Dk)
,则输出张量的形状为(D1, ..., Dk)
,并且
tf.diag_part(input)[i1, ..., ik] = input[i1, ..., ik, i1, ..., ik]
这就是您收到错误的原因。为了保持上述前提条件,输入张量必须具有偶数等级。
另一方面, tf.matrix_diag_part
将输入张量视为一批二维矩阵,并计算每个矩阵的对角线。因此,如果输入张量具有形状(I, J, K, ..., M, N)
,则输出张量将具有形状(I, J, K, ..., min(M, N))
并且是
tf.matrix_diag_part(input)[i, j, k, ..., m] = input[i, j, k, ..., m, m]
这两个函数在第2级张量中是相同的,但是对于任何高于它的东西,它们都是非常不同的动物。