如何通过指定对角线值创建数组
How to create an array by specifying diagonal values
我有一个如下所示的数组:
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.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,所以它在对角线中只有一个值。
我有一个如下所示的数组:
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.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,所以它在对角线中只有一个值。