用python 替换2D数组的对角线
作者:互联网
参见英文答案 > changing the values of the diagonal of a matrix in numpy 7个
我有以下2D数组
A=([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16])
我想用数组替换主对角线
a = ([0,2,15,20])
因此,结果必须如此
A=([[0, 2, 3, 4],
[5, 2, 7, 8],
[9, 10, 15, 12],
[13, 14, 15, 20])
我尝试使用np.diag(a,k = 0),但它不起作用,因为np.diag()创建了一个带有数组“a”的对角线2D数组.
有没有办法用numpy做到这一点?
上面的例子是最简单的例子.我希望能够不仅改变邮件对角线而且改变所有对角线.
解决方法:
您可以使用np.fill_diagonal(..)
.就像文档说的那样:
numpy.fill_diagonal(a, val, wrap=False)
Fill the main diagonal of the given array of any dimensionality.
例如:
np.fill_diagonal(A, 20)
因此,我们在整个对角线上播放了20个.
您还可以使用不同的值填充对角线,例如:
np.fill_diagonal(A, [0,2,15,20])
例如:
>>> a = np.zeros((4,4))
>>> np.fill_diagonal(a, [0,2,15,20])
>>> a
array([[ 0., 0., 0., 0.],
[ 0., 2., 0., 0.],
[ 0., 0., 15., 0.],
[ 0., 0., 0., 20.]])
如果您想要更改其他对角线,则需要镜像阵列.例如对于反对角线,我们可以使用:
np.fill_diagonal(A[::-1], -20)
然后我们得到:
>>> A = np.zeros((4,4))
>>> np.fill_diagonal(A[::-1], -20)
>>> A
array([[ 0., 0., 0., -20.],
[ 0., 0., -20., 0.],
[ 0., -20., 0., 0.],
[-20., 0., 0., 0.]])
如果我们不考虑超对角线和子对角线,则n维矩阵具有n×(n-1)个对角线.我们可以通过镜像一个或多个维度来分配它.
标签:diagonal,python,arrays,numpy 来源: https://codeday.me/bug/20191008/1870968.html