scipy 如何创建缩放+移位单位脉冲的2D阵列?

rn0zuynd  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(101)

我正在寻找一种高效的方法来获得这样的2D数组:

array([[ 2., -0., -0.,  0., -0., -0.,  0.,  0., -0.,  0.],
       [ 0., -1., -0.,  0., -0., -0.,  0.,  0., -0.,  0.],
       [ 0., -0., -5.,  0., -0., -0.,  0.,  0., -0.,  0.],
       [ 0., -0., -0.,  2., -0., -0.,  0.,  0., -0.,  0.],
       [ 0., -0., -0.,  0., -5., -0.,  0.,  0., -0.,  0.],
       [ 0., -0., -0.,  0., -0., -1.,  0.,  0., -0.,  0.],
       [ 0., -0., -0.,  0., -0., -0.,  0.,  0., -0.,  0.],
       [ 0., -0., -0.,  0., -0., -0.,  0.,  2., -0.,  0.],
       [ 0., -0., -0.,  0., -0., -0.,  0.,  0., -5.,  0.],
       [ 0., -0., -0.,  0., -0., -0.,  0.,  0., -0.,  4.]])

对角线元素包含值。我当前的尝试:

import numpy as np
N = 10
k = np.random.randint(-5, 5, size=N) # weights
xk = k * np.identity(N) # scaled+shifted unit impulses

有没有直接获取k*np.identity()的方法?可能是scipy,因为这种类型的数组在DSP中很常见。

tsm1rwdh

tsm1rwdh1#

np.diag([1,2,3]

给予

[[1 0 0]
 [0 2 0]
 [0 0 3]]

为你创建一个对角矩阵。在这种情况下,你只需要创建相应的对角元素。
根据你的情况:

import numpy as np
N = 10
k = np.random.randint(-5, 5, size=N) # weights
xk = np.diag(k)
print(xk)

给予

[[-4  0  0  0  0  0  0  0  0  0]
 [ 0  1  0  0  0  0  0  0  0  0]
 [ 0  0  1  0  0  0  0  0  0  0]
 [ 0  0  0  4  0  0  0  0  0  0]
 [ 0  0  0  0  3  0  0  0  0  0]
 [ 0  0  0  0  0 -3  0  0  0  0]
 [ 0  0  0  0  0  0  4  0  0  0]
 [ 0  0  0  0  0  0  0  1  0  0]
 [ 0  0  0  0  0  0  0  0  4  0]
 [ 0  0  0  0  0  0  0  0  0 -1]]

相关问题