首页 > 解决方案 > 将小矩阵中的值分配到大矩阵中的指定位置

问题描述

我想知道在 Python 中是否存在类似的方法(Mathematica): Mathematica

我已经在 Python 中尝试过,但它不起作用。我也尝试过使用简单的 2 个循环numpy.put()或使用简单的 2 个for循环。这两种方法可以正常工作,但我发现它们对于较大的矩阵(例如 3000×3000 元素)非常耗时。

用 Python 描述的问题,

import numpy as np

a = np.arange(0, 25, 1).reshape(5, 5)
b = np.arange(100, 500, 100).reshape(2, 2)
p = np.array([0, 3])

a[p][:, p] = b

输出不变的矩阵aPython

标签: pythonnumpymatrixwolfram-mathematica

解决方案


也许您正在寻找这个:

a[p[...,None], p] = b

上述赋值后的数组a如下所示:

[[100   1   2 200   4]
 [  5   6   7   8   9]
 [ 10  11  12  13  14]
 [300  16  17 400  19]
 [ 20  21  22  23  24]]

Integer Array Indexing中所述,两个整数索引数组将一起广播,并一起迭代,从而有效地索引位置a[0,0]a[0,3]a[3,0]a[3,3]a然后,赋值语句将使用 RHS 中的相应元素值在 的这些位置执行元素赋值。


推荐阅读