我有一个类似矩阵的
[[1, 2], [3, 4]]
我想替换另一个矩阵中的1
[[1, 0], [1, 1]]
要制作此矩阵,请执行以下操作:
[[1, 2, 0, 0], [3, 4, 0, 0], [1, 2, 1, 2], [3, 4, 3, 4]]
第二矩阵中的1 s可以在任何位置,这只是一个例子。我该怎么做?
1
anauzrmj1#
使用scipy.linalg.kron
scipy.linalg.kron
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]])
它有两个维度分别为M, N和P, Q的数组,这里是维度分别为2, 2和2, 2的m2和m1。接下来,它会以下列方式将数组相乘:
M, N
P, Q
2, 2
m2
m1
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
建立维度的单一数组(M*P,N*Q)
M*P
N*Q
n6lpvg4x2#
您可以使用一个名为Kronecker product的数学运算来优雅地实现这一点,该运算在numpy中实现(或者在scipy中使用下面的numpy)。
numpy
scipy
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]])
下面是克罗内克积的数学运算:
换句话说,利用矩阵A(或numpy数组a),我们指示B的项是否应被添加(如果为1)或不添加(如果为0)。
a
2条答案
按热度按时间anauzrmj1#
使用
scipy.linalg.kron
它是如何工作的?
它有两个维度分别为
M, N
和P, Q
的数组,这里是维度分别为2, 2
和2, 2
的m2
和m1
。接下来,它会以下列方式将数组相乘:
建立维度的单一数组(
M*P
,N*Q
)n6lpvg4x2#
您可以使用一个名为Kronecker product的数学运算来优雅地实现这一点,该运算在
numpy
中实现(或者在scipy
中使用下面的numpy
)。下面是克罗内克积的数学运算:
换句话说,利用矩阵A(或
numpy
数组a
),我们指示B的项是否应被添加(如果为1)或不添加(如果为0)。