用numpy中的另一个小矩阵替换矩阵的子部分

新手上路,请多包涵

我是 Numpy 的新手,想替换矩阵的一部分。例如,我有两个矩阵,A,B 由 numpy 生成

In [333]: A = ones((5,5))

In [334]: A
Out[334]:
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])

In [335]: B
Out[335]:
array([[ 0.1,  0.2],
       [ 0.3,  0.4]])

最后,我想让 A 成为以下矩阵。

 In [336]: A
Out[336]:
array([[ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  0.1,  0.2],
       [ 1.,  1.,  1.,  0.3,  0.4]])

和/或以下

In [336]: A
Out[336]:
array([[ 1.,  1.,  1.,  0.1,  0.2],
       [ 1.,  1.,  1.,  0.3,  0.4],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 1.,  1.,  1.,  1.,  1.]])

我试过喜欢跟随但它没有用。我现在不知道:(

 A[[0,1],:][:,[3,4]] = B

甚至我试过

A[[0,1],:][:,[3,4]] = 1

检查四个单元格是否已更改。你有什么主意吗?

原文由 sangheestyle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 564
2 个回答

以下是您的操作方法:

 >>> A[3:5, 3:5] = B
>>> A
array([[ 1. ,  1. ,  1. ,  1. ,  1. ],
       [ 1. ,  1. ,  1. ,  1. ,  1. ],
       [ 1. ,  1. ,  1. ,  1. ,  1. ],
       [ 1. ,  1. ,  1. ,  0.1,  0.2],
       [ 1. ,  1. ,  1. ,  0.3,  0.4]])

原文由 NPE 发布,翻译遵循 CC BY-SA 3.0 许可协议

通常,例如,对于不连续的行/列使用 numpy.putmask(a, mask, values) (设置 a.flat[n] = values[n] for each n where mask.flat[n]==True

例如

In [1]: a = np.zeros((3, 3))
Out [1]: a
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

In [2]: values = np.ones((2, 2))
Out [2]: values
array([[1., 1.],
       [1., 1.]])

In [3]: mask = np.zeros((3, 3), dtype=bool)
In [4]: mask[0,0] = mask[0,1] = mask[1,1] = mask[2,2] = True

Out [4]: mask
array([[ True,  True, False],
       [False,  True, False],
       [False, False,  True]])

In [5] np.putmask(a, mask, values)
Out [5] a
array([[1., 1., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

原文由 Grag2015 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题