Tom*_*ean 3 python numpy matrix linear-algebra scipy
我有一个类似矩阵的
[[1, 2],
[3, 4]]
Run Code Online (Sandbox Code Playgroud)
我想替换另一个矩阵中的 1:
[[1, 0],
[1, 1]]
Run Code Online (Sandbox Code Playgroud)
制作这个矩阵:
[[1, 2, 0, 0],
[3, 4, 0, 0],
[1, 2, 1, 2],
[3, 4, 3, 4]]
Run Code Online (Sandbox Code Playgroud)
第二个矩阵中的s1可以在任何位置,这只是一个例子。
我怎样才能做到这一点?
from scipy.linalg import kron
m1 = np.array([[1, 2],[3, 4]])
m2 = np.array([[1, 0], [1, 1]])
output:
kron(m2, m1)
array([[1, 2, 0, 0],
[3, 4, 0, 0],
[1, 2, 1, 2],
[3, 4, 3, 4]])
Run Code Online (Sandbox Code Playgroud)
它需要两个维度为M, N和 的P, Q数组。这里,m2还有m1和2, 2尺寸2, 2。
接下来,它按以下方式将数组相乘:
m2[0,0]*m1 m2[0,1]*m1 ... m2[0,-1]*m1
m2[1,0]*m1 m2[1,1]*m1 ... m2[1,-1]*m1
...
m2[-1,0]*m1 m2[-1,1]*m1 ... m2[-1,-1]*m1
Run Code Online (Sandbox Code Playgroud)
创建维度为 ( M*P, N*Q)的单个数组
您可以使用称为克罗内克积的数学运算来优雅地做到这一点,该运算在numpy(或在下面scipy使用numpy)中实现。
import numpy as np # or from scipy import linealg
a = np.array([[1, 0],
[1, 1]])
b = np.array([[1, 2],
[3, 4]])
np.kron(a, b) # or linealg.kron(a, b)
# returns
# array([[1, 2, 0, 0],
# [3, 4, 0, 0],
# [1, 2, 1, 2],
# [3, 4, 3, 4]])
Run Code Online (Sandbox Code Playgroud)
以下是克罗内克乘积在数学上的作用:
换句话说,通过矩阵A(或numpy数组a),我们指示是否应添加 B 的条目(如果为 1)或不添加(如果为 0)。