gpt4 book ai didi

python - 如何将张量元素划分为特定索引

转载 作者:行者123 更新时间:2023-12-03 04:58:30 26 4
gpt4 key购买 nike

我有一个像这样的张量:

out = [[ 3,  6,  5,  4],
[ 6, 5, 10, 13],
[ 5, 10, 6, 22],
[ 4, 13, 22, 9]]

这是一个对称矩阵。我想要做的是将每个元素除以对角线相同索引中的值。所以这个矩阵中对角线的值为:

index0 = 3
index1 = 5
index2 = 6
index3 = 9

结果将如下所示:

[[3      ,  6/(3*5) ,  5/(3*6) ,  4/(3*9) ]
[6/(3*5), 5 , 10/(5*6), 13/(5*9)]
[5/(3*6), 10/(5*6), 6 , 22/(6*9)]
[4/(3*9), 13/(5*9), 22/(6*9), 9 ]]

让我浏览一下第一行:

3 是对角线中的值,因此我们将跳过它

6/3*56索引 0 和 1 处的值,因此我将除 6 code> 由 index0 和 1 中的对角线值计算。

5/3*65 是索引 0 和 2 处的值,以便我将其除以索引处的对角线值0 和 2

4/3*94 是索引 0 和 3 处的值,以便我将其除以索引处的对角线值0 和 3

最佳答案

可以在tensorflow(或numpy)中按如下方式完成。

  1. 我们采用原始矩阵并将对角线归零。
  2. 我们将结果矩阵除以对角向量。
  3. 我们转置 2 的结果,然后再次除以对角向量。
  4. 我们添加在第 1 步中归零的对角线。
import tensorflow as tf

out = [[ 3, 6, 5, 4],
[ 6, 5, 10, 13],
[ 5, 10, 6, 22],
[ 4, 13, 22, 9]]

tensor = tf.constant(out, dtype=tf.float32)

diag_indices = tf.tile(tf.range(tf.shape(tensor)[0])[..., None], [1, 2])
diag = tf.gather_nd(tensor, diag_indices) # [3. 5. 6. 9.]

diag_matrix = tf.linalg.tensor_diag(diag)
zero_diag_matrix = tensor - diag_matrix
res = tf.transpose(zero_diag_matrix / diag) / diag + diag_matrix

with tf.Session() as sess:
print(res.eval())
# [[3. 0.4 0.27777776 0.14814815]
# [0.4 5. 0.33333334 0.28888887]
# [0.27777776 0.3333333 6. 0.4074074 ]
# [0.14814815 0.28888887 0.4074074 9. ]]

关于python - 如何将张量元素划分为特定索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com