我正在尝试填充 100x100 矩阵上的非对角线元素,如下面的 matlab 代码所示,那么如何在 python 中复制它。
T=(2*t0*diag(ones(1,100)))-(t0*diag(ones(1,99),1))-(t0*diag(ones(1,99),-1))
所以我知道 RHS 的第一项将用值 2*t0
填充矩阵的对角线,
我在 python 中的操作如下:
x = np.zeros((100,100))
np.fill_diagonal(x,2*t0)
但是我不知道第2项和第3项是怎么做的,我知道它们会用-t0
的值填充对角线元素上方和下方的值,而不是全部关闭对角线值,但只用-t0填充对角线的上下值,其余均为零,但我不知道如何为其编写python代码。
我找到了这段代码:
# diagonal with offset from the main diagonal
diag([1,2,3], k=1)
将输出为:
array([[0, 1, 0, 0],
[0, 0, 2, 0],
[0, 0, 0, 3],
[0, 0, 0, 0]])
但是如何像我的问题一样将它应用于大型矩阵呢? 我在交互式 python 中工作,即 Anaconda,那么我可以使用哪些其他包来解决我的问题?
最佳答案
根据您在此处提供的 np.diag
,很容易做到:
a = np.ones((1, 100))[0]
b = np.ones((1, 99))[0]
m = np.diag(a, 0) + np.diag(b, -1) + np.diag(b, 1)
m
这里是 100x100 三对角矩阵
更新:
我找到了一个链接 here类似的问题,也看看。
关于python - 在 python 的 100 x 100 矩阵中,填充非对角线元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20651432/