【问题标题】:Numpy: how to return a view on a matrix A based on submatrix BNumpy:如何基于子矩阵 B 返回矩阵 A 的视图
【发布时间】:2016-11-18 07:18:13
【问题描述】:

给定一个维度为 axa 的矩阵 A,维度为 bxb 的矩阵 B,并且 axa 模 bxb == 0。B 是 A 的子矩阵,从 (0,0) 开始并平铺直到满足 axa 的维度.

A = array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])

子矩阵的一个例子可能是:

B = array([[10, 11],
           [14, 15]])

数字 15 相对于 B 的坐标位于 (1, 1) 位置。

对于 B 中的特定位置,我如何返回数组 A 的视图?例如对于 B 中的位置 (1,1),我想从 A 中获取所有这些值:

C = array([[5, 7],
           [13, 15]])

我想要一个视图的原因是我希望更新 A 中的多个位置:

C = array([[5, 7],[13, 15]]) = 20

结果

A = array([[ 0,  1,  2,  3],
           [ 4,  20,  6, 20],
           [ 8,  9, 10, 11],
           [12, 20, 14, 20]])

【问题讨论】:

  • 当用作 ``A[...]=....` 时,可以推进索引编制(在 getitem 意义上使用时是副本创建者)。

标签: python numpy matrix


【解决方案1】:

您可以通过以下方式获得:

>>> A = np.array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])
>>> A[np.ix_([1,3],[1,3])] = 20
>>> A
array([[ 0,  1,  2,  3],
       [ 4, 20,  6, 20],
       [ 8,  9, 10, 11],
       [12, 20, 14, 20]])

有关np.ix_的更多信息可以查看NumPy documentation

【讨论】:

  • 为了更清楚,可能值得将[1,3] 写成[1,1+len(B)]
  • 非常感谢 Pedro,我不知道 Numpy 给了我们多少。
猜你喜欢
  • 2017-09-26
  • 2017-04-20
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2018-04-22
  • 2013-04-20
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多