我有一个向量长度n
和一个mxm
矩阵。通常m >> n
(m
比n
大得多)。我需要从对角线开始将向量重复写入矩阵。例如:
向量 v = [v_1, v_2, v_3]
与 4x4
零矩阵结果:
v_1, v_2, v_3, 0
0, v_1, v_2, v_3
0, 0, v_1, v_2
0, 0, 0, v_1
由于我必须经常这样做,因此它必须相当快。现在我正在原始 python 中循环矩阵的每一行并将向量写入所需的位置,但这很慢。
最佳答案
检查numpy.eye 。这对你有用吗?
v = [1,2,3]
N = 5
M = 10
arr = np.sum(np.eye(N, k=i, M=10) * j for i, j in enumerate(v))
arr
>>array([[1., 2., 3., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 2., 3., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 2., 3., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 2., 3., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 2., 3., 0., 0., 0.]])
编辑(感谢hpaulj建议):如果你的矩阵很大并且有很多0,你可以使用稀疏矩阵
from scipy.sparse import diags
arr = diags(v,offsets=[0,1,2],shape=(N,M))
print(arr.A)
>>array([[1., 2., 3., 0., 0., 0., 0., 0., 0., 0.],
[0., 1., 2., 3., 0., 0., 0., 0., 0., 0.],
[0., 0., 1., 2., 3., 0., 0., 0., 0., 0.],
[0., 0., 0., 1., 2., 3., 0., 0., 0., 0.],
[0., 0., 0., 0., 1., 2., 3., 0., 0., 0.]])
关于python - 从对角线开始将向量写入矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313170/