我试图给矩阵的多个对角线赋值。例如,我有这个矩阵:
>>> u = np.zeros(25).reshape(5, 5)
>>> u
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
字符串
我想给上面的$k$-第i条对角线赋值。例如,如果$k=1$,我想要主对角线上方的对角线。我试图通过使用np.diag
来实现这一点,就像np.diag(u, k=1) = 1
一样,我想得到以下结果:
>>> u
array([[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0.]])
型
问题是,这又抛出了一个SyntaxError: can't assign to function call
,但np.diag
返回了对原始矩阵的引用,正如你所看到的:
>>> np.may_share_memory(np.diag(u, k=1), u)
True
型
我该怎么做呢?先谢谢你。
2条答案
按热度按时间wrrgggsh1#
您可以使用
字符串
输出:
型
ufj5ltwl2#
如果我理解正确的话,你稍微误解了
diag(v,k)
,因为它的参数是来自向量v
的(次,超)对角矩阵。为了实现你想要的矩阵,你可以做以下事情:字符串
现在你可以看到矢量
v
直接根据k
切片,因为偏移对角线的元素较少。这个方法可以通过创建一个具有所需值的矢量并将其添加到零矩阵来给予任何你想要的偏移对角线元素。使用这个方法,我们可以改变任何偏移对角线的值。我希望这能回答你的问题,并表明我们可以对任何数字这样做通过使用full((n,m),q)
创建向量或具有任何向量。