编程语言
首页 > 编程语言> > 用python 替换2D数组的对角线

用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