【问题标题】:How to create an array by specifying diagonal values如何通过指定对角线值来创建数组
【发布时间】:2025-12-17 18:05:02
【问题描述】:

我有一个如下的数组:

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

它的形状是(4,1)。

当我像下面这样使用 numpy.diag 时:

LA = numpy.diag(poles)

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

【问题讨论】:

  • 您期待什么? np.diag 将采用数组的对角线值,因为其中一个轴的长度仅为 1,因此只有一项。
  • @busybear。我希望得到一个对角数组(4*4 矩阵),其中对角元素是极点元素,所有其他元素为零。

标签: python arrays numpy matrix diagonal


【解决方案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。

【讨论】: