如何通过指定对角线值来创建数组

时间:2019-10-07 22:36:52

标签: python arrays numpy matrix diagonal

我有一个如下数组:

  poles = numpy.array([[-1+1j], [-1-1j], [-2+3j], [-2-3j]])

它的形状是(4,1)。

当我使用如下所示的numpy.diag时:

LA = numpy.diag(poles)

我期望看到一个对角矩阵,输出为[-1.+1.j]。 有人可以解释发生了什么,应该怎么做才能看到对角矩阵? 我还尝试将形状更改为(1,4),但结果没有改变。

1 个答案:

答案 0 :(得分:1)

您要寻找的功能是np.fill_diagonal。这将设置数组的对角线值。您必须先创建数组:

arr = np.zeros((4, 4), dtype=np.complex64))
np.fill_diagonal(arr, poles)

arr现在是:

array([[-1.+1.j,  0.+0.j,  0.+0.j,  0.+0.j],
       [ 0.+0.j, -1.-1.j,  0.+0.j,  0.+0.j],
       [ 0.+0.j,  0.+0.j, -2.+3.j,  0.+0.j],
       [ 0.+0.j,  0.+0.j,  0.+0.j, -2.-3.j]], dtype=complex64)

另一方面,

np.diagonal检索对角线上的值。 np.diagonal(arr)的输出是:

array([-1.+1.j, -1.-1.j, -2.+3.j, -2.-3.j], dtype=complex64)

在您的示例中,您要检索poles的对角线,由于其中一个轴只有长度1,因此对角线中只有一个值。