首页 > 解决方案 > 有没有办法可以用第一列和列之间的关系建立一个矩阵?

问题描述

我正在尝试构建一个 numpy 矩阵 B 知道它的第一列和列之间的关系

更具体地说,我有第一列,如 array([1],[1],[1],[1]) for B ,另一个已知矩阵 A ,关系是 B(t+1)=B(t )+ A(t+1)。其中 B(t) 表示 B 的 t 列。有什么方法可以在不使用 for 循环的情况下使用矩阵计算构建 B?

我试过 np.einsum 但它似乎只能使用已知矩阵进行计算

一个=matrix([[1, 2, 3, 4], [2, 4, 5, 6], [3, 5, 6, 7], [4, 6, 5, 4]])

乙=matrix([[1., 0., 0., 0.], [1., 0., 0., 0.], [1., 0., 0., 0.], [1., 0., 0., 0.]])

现在,我想填充 B 的列(第一列除外)。

我期待决赛

乙 =matrix([[ 1., 3., 6., 10.], [ 1., 5., 10., 16.], [ 1., 6., 12., 19.], [ 1., 7., 12., 16.]])

谢谢!

标签: pythonnumpy

解决方案


B您可以通过堆叠 的第一行以及除第一行之外的所有内容来构建一个新矩阵A。然后你可以np.cumsum()用来做一个累计和:

A=np.matrix([[1, 2, 3, 4],
          [2, 4, 5, 6],
          [3, 5, 6, 7],
          [4, 6, 5, 4]])

B=np.matrix([[1., 0., 0., 0.],
          [1., 0., 0., 0.],
          [1., 0., 0., 0.],
          [1., 0., 0., 0.]])

np.cumsum(np.hstack([B[:,:1], A[:,1:]]), axis=1)

结果:

matrix([[ 1.,  3.,  6., 10.],
        [ 1.,  5., 10., 16.],
        [ 1.,  6., 12., 19.],
        [ 1.,  7., 12., 16.]])

推荐阅读