将小矩阵中的值分配到大矩阵中的指定位置
Assign values from small matrix to specified places in larger matrix
我想知道 Python 中是否存在类似的方法 (Mathematica):
Mathematica
我在Python试过了,还是不行。我也尝试过 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
输出不变的矩阵a
:Python
也许您正在寻找这个:
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]
。然后,赋值语句将使用 RHS.
中的相应元素值在 a
的这些位置执行逐元素赋值
我想知道 Python 中是否存在类似的方法 (Mathematica): Mathematica
我在Python试过了,还是不行。我也尝试过 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
输出不变的矩阵a
:Python
也许您正在寻找这个:
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]
。然后,赋值语句将使用 RHS.
a
的这些位置执行逐元素赋值