gpt4 book ai didi

python - 如何在Python中构造对称矩阵

转载 作者:行者123 更新时间:2023-12-01 09:33:48 24 4
gpt4 key购买 nike

我有以下内容

Import numpy as np

Mat1 = np.array([[1, 2, 3],
[0, 4, 5],
[0, 0, 6]])
Mat2 = np.transpose(Mat1)
for i in range(3):
for k in range(3):
if i == k:
Mat2[i,k] = 0
Mat = Mat2 + Mat1
print(Mat)

但是我的回答给了我

[[0 2 3]
[2 0 5]
[3 5 0]]

当我应该在对角线上有 1, 4, 6 时。谁能明白为什么吗?

最佳答案

您可能需要考虑的一些建议:

正如 @NicoSchertler 所指出的,您原始方法的问题在于转置和原始矩阵共享它们的数据,这意味着每当您修改两者之一的元素时,相应的元素另一个也发生变化。

因此,在您的原始方法和第二种方法中,您可能不想写入转置。您的第二种方法很好:添加矩阵并转置并稍后处理对角线。但是你的第一个嵌套循环实际上没有任何效果,所以最好将其忽略。

此外,嵌套循环对于设置对角线来说是完全没有必要和浪费的。您可以通过以下方式获得相同的效果

for i in range(3):
Mat[i, i] = a[i]

但是你可以使用 numpy 的高级索引做得更好,无论如何你迟早都会熟悉它:

idx = np.arange(3)
Mat[idx, idx] = a

这是循环的矢量化形式,您应该养成尽可能避免循环并找到矢量化解决方案的习惯。

关于python - 如何在Python中构造对称矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49717999/

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