带你一次搞懂点积(内积)、叉积(外积)

带你一次搞懂点积(内积)、叉积(外积)

点积与叉积

1. 向量的点积与叉积1.1 向量的点积1.2 向量的叉积

2 矩阵的点积与叉积2.1 矩阵的点积2.2 矩阵的叉积

3. 元素积4. 克罗内克积

1. 向量的点积与叉积

1.1 向量的点积

数量积又称标量积(Scalar product)、点积(Dot product),在欧几里得空间(Euclidean space)中称为内积(Inner product),对应元素相乘相加,结果是一个标量(即一个数)。

对于向量

a

=

(

a

1

,

a

2

)

b

=

(

b

1

,

b

2

)

\vec{a}=\left( {{a}_{1}},{{a}_{2}} \right),\vec{b}=\left( {{b}_{1}},{{b}_{2}} \right)

a

=(a1​,a2​),b

=(b1​,b2​),两者的数量积:

a

b

=

a

1

b

1

+

a

2

b

2

\vec{a}\cdot \vec{b}= {{a}_{1}}{{b}_{1}}+{{a}_{2}}{{b}_{2}}

a

⋅b

=a1​b1​+a2​b2​

a

b

\vec{a}\cdot \vec{b}

a

⋅b

的几何意义是

a

\vec{a}

a

b

\vec{b}

b

方向上的投影(仅在二维、三维空间向量有意义):

a

b

=

a

b

c

o

s

θ

\vec{a}\cdot \vec{b}=\left| {\vec{a}} \right|* | {\vec{b}} | *cos\theta

a

⋅b

=∣a

∣∗∣b

∣∗cosθ其中,

a

\left| {\vec{a}} \right|

∣a

∣ 、

b

|{\vec{b}}|

∣b

∣分别为向量

a

\vec{a}

a

b

\vec{b}

b

的模,

θ

\theta

θ为向量

a

\vec{a}

a

b

\vec{b}

b

的夹角。

对于

n

n

n维向量

a

=

(

a

1

,

a

1

,

.

.

.

,

a

n

)

b

=

(

b

1

,

b

2

,

.

.

.

,

b

n

)

\vec{a}=\left( {{a}_{1}},{{a}_{1}},..., {{a}_{n}} \right)~,\vec{b}=\left( {{b}_{1}},{{b}_{2}} ,...,{{b}_{n}}\right)

a

=(a1​,a1​,...,an​) ,b

=(b1​,b2​,...,bn​),两者的数量积:

a

b

=

a

1

b

1

+

a

2

b

2

+

.

.

.

+

a

n

b

n

\vec{a}\cdot \vec{b}= {{a}_{1}}{{b}_{1}}+{{a}_{2}}{{b}_{2}}+...+{{a}_{n}}{{b}_{n}}

a

⋅b

=a1​b1​+a2​b2​+...+an​bn​

numpy中 使用np.dot或numpy.inner()实现向量的点积

举例

a

=

(

1

,

2

,

3

)

b

=

(

4

,

5

,

6

)

\vec{a} = (1,2,3) \;\;\;\; \vec{b} = (4,5,6)

a

=(1,2,3)b

=(4,5,6)

a

b

=

1

×

4

+

2

×

5

+

3

×

6

=

32

\vec{a}\cdot \vec{b}= 1\times 4 + 2 \times 5 +3\times 6 = 32

a

⋅b

=1×4+2×5+3×6=32

import numpy as np

a = np.array([1,2,3])

b = np.array([4,5,6])

## 数量积 使用np.dot或np.inner

print(np.dot(a,b))

1.2 向量的叉积

向量积又称矢量积(Vector product)、叉积(Cross product)、外积(Outer product),结果是一个向量。

对于向量

a

=

(

a

1

,

a

2

,

a

3

)

b

=

(

b

1

,

b

2

,

b

3

)

\vec{a}=\left( {{a}_{1}},{{a}_{2}}, {{a}_{3}} \right)~\vec{b}=\left( {{b}_{1}},{{b}_{2}} ,{{b}_{3}}\right)

a

=(a1​,a2​,a3​) b

=(b1​,b2​,b3​),两者的叉积为

a

\vec{a}

a

b

\vec{b}

b

的法向量,该向量垂直于

a

\vec{a}

a

b

\vec{b}

b

构成的平面。

a

×

b

=

i

j

k

a

1

a

2

a

3

b

1

b

2

b

3

=

(

a

2

b

3

b

2

a

3

)

i

(

a

1

b

3

b

1

a

3

)

j

+

(

a

1

b

2

b

1

a

2

)

k

\vec{a} \times \vec{b}= \begin{vmatrix}i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ \end{vmatrix} = (a_2b_3-b_2a_3)\vec{i} - (a_1b_3-b_1a_3)\vec{j}+(a_1b_2-b_1a_2)\vec{k}

a

×b

=∣

∣​ia1​b1​​ja2​b2​​ka3​b3​​∣

∣​=(a2​b3​−b2​a3​)i

−(a1​b3​−b1​a3​)j

​+(a1​b2​−b1​a2​)k

其中,

i

j

k

i,j,k

i,j,k分别是

X

Y

Z

X,Y,Z

X,Y,Z轴方向的单位向量.

该向量的模

a

×

b

=

a

b

s

i

n

θ

|\vec{a} \times \vec{b}| =\left| {\vec{a}} \right|*| {\vec{b}} |*sin\theta

∣a

×b

∣=∣a

∣∗∣b

∣∗sinθ其中,

a

\left| {\vec{a}} \right|

∣a

∣ 、

b

|{\vec{b}}|

∣b

∣分别为向量

a

\vec{a}

a

b

\vec{b}

b

的模,

θ

\theta

θ为向量

a

\vec{a}

a

b

\vec{b}

b

的夹角。

即,叉积的长度

a

×

b

|\vec{a} \times \vec{b}|

∣a

×b

∣为向量

a

\vec{a}

a

b

\vec{b}

b

共起点时,构成平行四边形的面积。

numpy中 使用np.cross实现向量的叉积

举例

a

=

(

1

,

2

,

3

)

b

=

(

4

,

5

,

6

)

\vec{a} = (1,2,3) \;\;\;\; \vec{b} = (4,5,6)

a

=(1,2,3)b

=(4,5,6)

a

b

=

(

2

×

6

3

×

5

,

4

×

3

1

×

6

,

1

×

5

2

×

4

)

=

(

3

,

6

,

3

)

\vec{a}\cdot \vec{b}=(2\times 6 -3\times 5 , 4 \times 3 - 1\times 6,1\times 5 - 2 \times 4)=(-3,6,-3)

a

⋅b

=(2×6−3×5,4×3−1×6,1×5−2×4)=(−3,6,−3)

import numpy as np

a = np.array([1,2,3])

b = np.array([4,5,6])

## 叉积 使用np.cross

print(np.cross(a,b))

点积与叉积小结:

名称点积/数量积/标量积/内积/叉积/向量积/矢量积/外积输入(以

R

3

R^3

R3为例)

a

=

(

a

1

,

a

2

,

a

3

)

,

b

=

(

b

1

,

b

2

,

b

3

)

\vec{a}=\left( {{a}_{1}},{{a}_{2}}, {{a}_{3}} \right),\vec{b}=\left( {{b}_{1}},{{b}_{2}} ,{{b}_{3}}\right)

a

=(a1​,a2​,a3​),b

=(b1​,b2​,b3​)

a

=

(

a

1

,

a

2

,

a

3

)

,

b

=

(

b

1

,

b

2

,

b

3

)

\vec{a}=\left( {{a}_{1}},{{a}_{2}}, {{a}_{3}} \right),\vec{b}=\left( {{b}_{1}},{{b}_{2}} ,{{b}_{3}}\right)

a

=(a1​,a2​,a3​),b

=(b1​,b2​,b3​)运算

a

b

=

a

1

b

1

+

a

2

b

2

+

a

3

b

3

\vec{a}\cdot \vec{b}= {{a}_{1}}{{b}_{1}}+{{a}_{2}}{{b}_{2}}+{{a}_{3}}{{b}_{3}}

a

⋅b

=a1​b1​+a2​b2​+a3​b3​

a

×

b

=

i

j

k

a

1

a

2

a

3

b

1

b

2

b

3

\vec{a} \times \vec{b}=\begin{vmatrix}i & j & k \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ \end{vmatrix}

a

×b

=∣

∣​ia1​b1​​ja2​b2​​ka3​b3​​∣

∣​输出数值(标量):

a

\vec{a}

a

b

\vec{b}

b

方向上的投影与

b

|\vec{b}|

∣b

∣的乘积,即

a

b

c

o

s

θ

| \vec{a} |* | \vec{b}|*cos\theta

∣a

∣∗∣b

∣∗cosθ向量(矢量):

a

\vec{a}

a

b

\vec{b}

b

的法向量,该向量的模为

a

b

s

i

n

θ

| \vec{a} |* | \vec{b}|*sin\theta

∣a

∣∗∣b

∣∗sinθ

注:数量、向量常用于数学;而标量、矢量常用于物理

2 矩阵的点积与叉积

2.1 矩阵的点积

对于

A

A

A矩阵(

m

×

s

m \times s

m×s阶),

B

B

B矩阵(

s

×

n

s \times n

s×n阶)(A的列数与B的行数相等),

A

=

[

a

11

a

12

a

1

s

a

21

a

22

a

2

s

a

m

1

a

m

2

a

m

s

]

B

=

[

b

11

b

12

b

1

n

b

21

b

22

b

2

n

b

s

1

b

s

2

b

s

n

]

A=\left[ \begin{matrix} {{a}_{11}} & {{a}_{12}} & \cdots & {{a}_{1s}} \\ {{a}_{21}} & {{a}_{22}} & \cdots & {{a}_{2s}} \\ \cdots & \cdots & \ddots & \vdots \\ {{a}_{m1}} & {{a}_{m2}} & \cdots & {{a}_{ms}} \\ \end{matrix} \right]~~~~~B=\left[ \begin{matrix} {{b}_{11}} & {{b}_{12}} & \cdots & {{b}_{1n}} \\ {{b}_{21}} & {{b}_{22}} & \cdots & {{b}_{2n}} \\ \cdots & \cdots & \ddots & \vdots \\ {{b}_{s1}} & {{b}_{s2}} & \cdots & {{b}_{sn}} \\ \end{matrix} \right]

A=⎣

⎡​a11​a21​⋯am1​​a12​a22​⋯am2​​⋯⋯⋱⋯​a1s​a2s​⋮ams​​⎦

⎤​ B=⎣

⎡​b11​b21​⋯bs1​​b12​b22​⋯bs2​​⋯⋯⋱⋯​b1n​b2n​⋮bsn​​⎦

⎤​两者的点积,即矩阵相乘的结果

C

=

A

B

C=AB

C=AB是

m

×

n

m\times n

m×n阶矩阵,

C

=

A

B

=

[

c

11

c

12

c

1

n

c

21

c

22

c

2

n

c

m

1

c

m

2

c

m

n

]

C=AB=\left[ \begin{matrix} {{c}_{11}} & {{c}_{12}} & \cdots & {{c}_{1n}} \\ {{c}_{21}} & {{c}_{22}} & \cdots & {{c}_{2n}} \\ \cdots & \cdots & \ddots & \vdots \\ {{c}_{m1}} & {{c}_{m2}} & \cdots & {{c}_{mn}} \\ \end{matrix} \right]

C=AB=⎣

⎡​c11​c21​⋯cm1​​c12​c22​⋯cm2​​⋯⋯⋱⋯​c1n​c2n​⋮cmn​​⎦

⎤​其中,矩阵

C

C

C中的元素满足

c

i

j

=

k

=

1

s

a

i

k

b

k

j

{{c}_{ij}}=\sum_{k=1}^{s}{{a}_{ik}}{{b}_{kj}}

cij​=k=1∑s​aik​bkj​举例

A

1

=

[

1

2

3

4

]

B

1

=

[

5

6

7

8

]

A

2

=

[

1

2

3

1

2

3

]

B

2

=

[

1

2

3

]

A_1 = \begin{bmatrix}1 & 2 \\3 & 4\end{bmatrix}\;\;\;\; B_1 = \begin{bmatrix}5 & 6 \\7 & 8\end{bmatrix}, \;\;\;\; A_2 = \begin{bmatrix}1 & 2 & 3\\1 & 2 & 3\end{bmatrix}\;\;\;\; B_2 = \begin{bmatrix}1\\2\\3 \end{bmatrix} \;\;\;\;

A1​=[13​24​]B1​=[57​68​],A2​=[11​22​33​]B2​=⎣

⎡​123​⎦

⎤​

A

1

B

1

=

[

19

22

43

50

]

A

2

B

2

=

[

14

14

]

A_1B_1 = \begin{bmatrix}19 & 22 \\43 & 50\end{bmatrix}, \;\;\;\; A_2B_2 = \begin{bmatrix}14&14\end{bmatrix}

A1​B1​=[1943​2250​],A2​B2​=[14​14​]numpy实现

import numpy as np

A1 = np.array([[1,2],[3,4]])

B2 = np.array([[5,6],[7,8]])

A2 = np.array([[1,2,3],[1,2,3]])

B2 = np.array([1,2,3])

## 数量积 使用np.dot

print(np.dot(A1,B1))

print(np.dot(A2,B2))

此外,numpyt提供了numpy.inner()函数,从字面意思理解是内积,其针对向量numpy.inner()与numpy.dot()输出一致,但针对矩阵有所不同。

print(np.inner(A1,B1))

输出为

[

17

23

39

53

]

\begin{bmatrix}17 & 23 \\39 & 53\end{bmatrix}

[1739​2353​] 其中,

17

=

1

×

5

+

2

×

6

23

=

1

×

7

+

2

×

8

17=1 \times 5 +2\times 6,23 = 1\times 7 +2\times 8

17=1×5+2×6,23=1×7+2×8

39

=

3

×

5

+

4

×

6

53

=

3

×

7

+

4

×

8

39 = 3\times 5 +4\times 6,53=3\times7 +4\times 8

39=3×5+4×6,53=3×7+4×8

print(np.inner(A2,B2))

输出为

[

14

14

]

\begin{bmatrix}14&14\end{bmatrix}

[14​14​]

2.2 矩阵的叉积

针对矩阵并不存在叉积的概念,numpy中针对矩阵的叉积运算是按照向量的叉积进行运算。

举例

A

1

=

[

1

2

3

4

]

B

1

=

[

5

6

7

8

]

A

2

=

[

1

2

3

1

2

3

]

B

2

=

[

1

2

3

]

A_1 = \begin{bmatrix}1 & 2 \\3 & 4\end{bmatrix}\;\;\;\; B_1 = \begin{bmatrix}5 & 6 \\7 & 8\end{bmatrix}, \;\;\;\; A_2 = \begin{bmatrix}1 & 2 & 3\\1 & 2 & 3\end{bmatrix}\;\;\;\; B_2 = \begin{bmatrix}1\\2\\3 \end{bmatrix} \;\;\;\;

A1​=[13​24​]B1​=[57​68​],A2​=[11​22​33​]B2​=⎣

⎡​123​⎦

⎤​

A

1

×

B

1

=

[

4

4

]

A

2

×

B

2

=

[

0

0

0

0

0

0

]

A_1 \times B_1 = \begin{bmatrix}-4&-4\end{bmatrix}, \;\;\;\; A_2 \times B_2 = \begin{bmatrix}0 & 0&0 \\0 & 0&0\end{bmatrix}

A1​×B1​=[−4​−4​],A2​×B2​=[00​00​00​]numpy实现

import numpy as np

A1 = np.array([[1,2],[3,4]])

B1 = np.array([[5,6],[7,8]])

A2 = np.array([[1,2,3],[1,2,3]])

B2 = np.array([1,2,3])

## 叉积 使用np.cross

print(np.cross(A1,B1))

print(np.cross(A2,B2))

3. 元素积

元素积(element-wise product, point-wise product)又称哈达玛积(Hadamard product )、舒尔积、逐项积,对应元素相乘,结果还是向量/矩阵。

对于

n

n

n维向量

a

=

(

a

1

,

a

1

,

.

.

.

,

a

n

)

b

=

(

b

1

,

b

2

,

.

.

.

,

b

n

)

\vec{a}=\left( {{a}_{1}},{{a}_{1}},..., {{a}_{n}} \right)~,\vec{b}=\left( {{b}_{1}},{{b}_{2}} ,...,{{b}_{n}}\right)

a

=(a1​,a1​,...,an​) ,b

=(b1​,b2​,...,bn​),两者的元素积:

a

b

=

(

a

1

b

1

,

a

2

b

2

,

.

.

.

,

a

n

b

n

)

\vec{a} * \vec{b}= ({{a}_{1}{b}_{1}},{{a}_{2}}{{b}_{2}},...,{{a}_{n}}{{b}_{n}} )

a

∗b

=(a1​b1​,a2​b2​,...,an​bn​)对于同阶矩阵(

m

×

n

m \times n

m×n)

A

A

A、

B

B

B,两者的哈达玛(Hadamard)积:

A

B

=

[

a

11

b

11

a

12

b

12

a

1

n

b

1

n

a

21

b

21

a

22

b

22

a

2

n

b

2

n

a

m

1

b

m

1

a

m

2

b

m

2

a

m

n

b

m

n

]

A \circ B = \left[ \begin{matrix} {{a}_{11}{b}_{11}} & {{a}_{12}{b}_{12}} & \cdots & {{a}_{1n}{b}_{1n}} \\ {{a}_{21}{b}_{21}} & {{a}_{22}{b}_{22}} & \cdots & {{a}_{2n}{b}_{2n}} \\ \cdots & \cdots & \ddots & \vdots \\ {{a}_{m1}{b}_{m1}} & {{a}_{m2}{b}_{m2}} & \cdots & {{a}_{mn}{b}_{mn}} \\ \end{matrix} \right]

A∘B=⎣

⎡​a11​b11​a21​b21​⋯am1​bm1​​a12​b12​a22​b22​⋯am2​bm2​​⋯⋯⋱⋯​a1n​b1n​a2n​b2n​⋮amn​bmn​​⎦

⎤​

numpy中 使用np.multiply或*实现元素积

举例

向量:

a

=

(

1

,

2

,

3

)

b

=

(

4

,

5

,

6

)

\vec{a} = (1,2,3) \;\;\;\; \vec{b} = (4,5,6)

a

=(1,2,3)b

=(4,5,6)

a

b

=

(

4

,

10

,

18

)

\vec{a} \circ \vec{b} =(4 , 10 , 18)

a

∘b

=(4,10,18)矩阵:

A

1

=

[

1

2

3

4

]

B

1

=

[

5

6

7

8

]

A

2

=

[

1

2

3

1

2

3

]

B

2

=

[

1

2

3

]

A_1 = \begin{bmatrix}1 & 2 \\3 & 4\end{bmatrix}\;\;\;\; B_1 = \begin{bmatrix}5 & 6 \\7 & 8\end{bmatrix}, \;\;\;\; A_2 = \begin{bmatrix}1 & 2 & 3\\1 & 2 & 3\end{bmatrix}\;\;\;\; B_2 = \begin{bmatrix}1\\2\\3 \end{bmatrix} \;\;\;\;

A1​=[13​24​]B1​=[57​68​],A2​=[11​22​33​]B2​=⎣

⎡​123​⎦

⎤​

A

1

B

1

=

[

5

12

21

32

]

A

2

B

2

=

[

1

4

9

1

4

9

]

A_1 \circ B_1 = \begin{bmatrix}5 & 12 \\21 & 32\end{bmatrix}, \;\;\;\; A_2 \circ B_2 = \begin{bmatrix}1 & 4 & 9\\1 & 4 & 9\end{bmatrix}\;\;\;\;

A1​∘B1​=[521​1232​],A2​∘B2​=[11​44​99​]

import numpy as np

a = np.array([1,2,3])

b = np.array([4,5,6])

A1 = np.array([[1,2],[3,4]])

B1 = np.array([[5,6],[7,8]])

A2 = np.array([[1,2,3],[1,2,3]])

B2 = np.array([1,2,3])

## 数量积 使用np.multiply或*

print(np.multiply(a,b))

print(np.multiply(A1,B1))

print(np.multiply(A2,B2)) #阶数不一致的,numpy将进行广播确保一致

4. 克罗内克积

克罗内克积(Kronecker product)是两个任意大小的矩阵间的运算。

对于对于

A

A

A矩阵(

m

×

n

m \times n

m×n阶),

B

B

B矩阵(

p

×

q

p \times q

p×q阶):

A

=

[

a

11

a

12

a

1

n

a

21

a

22

a

2

n

a

m

1

a

m

2

a

m

n

]

B

=

[

b

11

b

12

b

1

q

b

21

b

22

b

2

q

b

p

1

b

p

2

b

p

q

]

A=\left[ \begin{matrix} {{a}_{11}} & {{a}_{12}} & \cdots & {{a}_{1n}} \\ {{a}_{21}} & {{a}_{22}} & \cdots & {{a}_{2n}} \\ \cdots & \cdots & \ddots & \vdots \\ {{a}_{m1}} & {{a}_{m2}} & \cdots & {{a}_{mn}} \\ \end{matrix} \right]~~~~~B=\left[ \begin{matrix} {{b}_{11}} & {{b}_{12}} & \cdots & {{b}_{1q}} \\ {{b}_{21}} & {{b}_{22}} & \cdots & {{b}_{2q}} \\ \cdots & \cdots & \ddots & \vdots \\ {{b}_{p1}} & {{b}_{p2}} & \cdots & {{b}_{pq}} \\ \end{matrix} \right]

A=⎣

⎡​a11​a21​⋯am1​​a12​a22​⋯am2​​⋯⋯⋱⋯​a1n​a2n​⋮amn​​⎦

⎤​ B=⎣

⎡​b11​b21​⋯bp1​​b12​b22​⋯bp2​​⋯⋯⋱⋯​b1q​b2q​⋮bpq​​⎦

⎤​两者的克罗内克积

C

=

A

B

C=A \otimes B

C=A⊗B是

m

p

×

n

q

mp×nq

mp×nq阶的分块矩阵:

C

=

A

B

=

[

a

11

B

a

12

B

a

1

n

B

a

21

B

a

22

B

a

2

n

B

a

m

1

B

a

m

2

B

a

m

n

B

]

C=A \otimes B = \left[ \begin{matrix} {{a}_{11}B} & {{a}_{12}B} & \cdots & {{a}_{1n}} B \\ {{a}_{21}} B& {{a}_{22}}B & \cdots & {{a}_{2n}} B \\ \cdots & \cdots & \ddots & \vdots \\ {{a}_{m1}} B& {{a}_{m2}} B& \cdots & {{a}_{mn}}B \\ \end{matrix} \right]

C=A⊗B=⎣

⎡​a11​Ba21​B⋯am1​B​a12​Ba22​B⋯am2​B​⋯⋯⋱⋯​a1n​Ba2n​B⋮amn​B​⎦

⎤​

=

[

a

11

b

11

a

11

b

12

a

11

b

1

q

a

1

n

b

11

a

1

n

b

12

a

1

n

b

1

q

a

11

b

21

a

11

b

22

a

11

b

2

q

a

1

n

b

21

a

1

n

b

22

a

1

n

b

2

q

a

11

b

p

1

a

11

b

p

2

a

11

b

p

q

a

1

n

b

p

1

a

1

n

b

p

2

a

1

n

b

p

q

a

m

1

b

11

a

m

1

b

12

a

m

1

b

1

q

a

m

n

b

11

a

m

n

b

12

a

m

n

b

1

q

a

m

1

b

21

a

m

1

b

22

a

m

1

b

2

q

a

m

n

b

21

a

m

n

b

22

a

m

n

b

2

q

a

m

1

b

p

1

a

m

1

b

p

2

a

m

1

b

p

q

a

m

n

b

p

1

a

m

n

b

p

2

a

m

n

b

p

q

]

=\left[ \begin{matrix} {{a}_{11}{b}_{11}} & {{a}_{11}{b}_{12}} & \cdots & {{a}_{11}} {b}_{1q} & \cdots & \cdots &{{a}_{1n}{b}_{11}} & {{a}_{1n}{b}_{12}} & \cdots & {{a}_{1n}} {b}_{1q} \\ {{a}_{11}{b}_{21}} & {{a}_{11}{b}_{22}} & \cdots & {{a}_{11}} {b}_{2q} & \cdots & \cdots &{{a}_{1n}{b}_{21}} & {{a}_{1n}{b}_{22}} & \cdots & {{a}_{1n}} {b}_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ {{a}_{11}{b}_{p1}} & {{a}_{11}{b}_{p2}} & \cdots & {{a}_{11}} {b}_{pq} & \cdots & \cdots &{{a}_{1n}{b}_{p1}} & {{a}_{1n}{b}_{p2}} & \cdots & {{a}_{1n}} {b}_{pq} \\ \vdots & \vdots & & \vdots & \ddots & & \vdots & \vdots & & \vdots \\ \vdots & \vdots & & \vdots & & \ddots & \vdots & \vdots & & \vdots \\ {{a}_{m1}{b}_{11}} & {{a}_{m1}{b}_{12}} & \cdots & {{a}_{m1}} {b}_{1q} & \cdots & \cdots &{{a}_{mn}{b}_{11}} & {{a}_{mn}{b}_{12}} & \cdots & {{a}_{mn}} {b}_{1q} \\ {{a}_{m1}{b}_{21}} & {{a}_{m1}{b}_{22}} & \cdots & {{a}_{m1}} {b}_{2q} & \cdots & \cdots &{{a}_{mn}{b}_{21}} & {{a}_{mn}{b}_{22}} & \cdots & {{a}_{mn}} {b}_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ {{a}_{m1}{b}_{p1}} & {{a}_{m1}{b}_{p2}} & \cdots & {{a}_{m1}} {b}_{pq} & \cdots & \cdots &{{a}_{mn}{b}_{p1}} & {{a}_{mn}{b}_{p2}} & \cdots & {{a}_{mn}} {b}_{pq} \\ \end{matrix} \right]

=⎣

⎡​a11​b11​a11​b21​⋮a11​bp1​⋮⋮am1​b11​am1​b21​⋮am1​bp1​​a11​b12​a11​b22​⋮a11​bp2​⋮⋮am1​b12​am1​b22​⋮am1​bp2​​⋯⋯⋱⋯⋯⋯⋱⋯​a11​b1q​a11​b2q​⋮a11​bpq​⋮⋮am1​b1q​am1​b2q​⋮am1​bpq​​⋯⋯⋯⋱⋯⋯⋯​⋯⋯⋯⋱⋯⋯⋯​a1n​b11​a1n​b21​⋮a1n​bp1​⋮⋮amn​b11​amn​b21​⋮amn​bp1​​a1n​b12​a1n​b22​⋮a1n​bp2​⋮⋮amn​b12​amn​b22​⋮amn​bp2​​⋯⋯⋱⋯⋯⋯⋱⋯​a1n​b1q​a1n​b2q​⋮a1n​bpq​⋮⋮amn​b1q​amn​b2q​⋮amn​bpq​​⎦

⎤​

numpy中 使用np.kron实现

举例

A

1

=

[

1

2

3

]

B

1

=

[

4

5

6

]

A

2

=

[

1

2

3

4

]

B

2

=

[

5

6

7

8

]

A

3

=

[

1

2

3

1

2

3

]

B

3

=

[

1

2

3

]

A_1 = \begin{bmatrix}1 \\ 2\\ 3 \end{bmatrix}\;B_1 = \begin{bmatrix}4\\5\\6 \end{bmatrix} \;A_2 = \begin{bmatrix}1 & 2 \\3 & 4\end{bmatrix}\;B_2 = \begin{bmatrix}5 & 6 \\7 & 8\end{bmatrix} \; A_3 = \begin{bmatrix}1 & 2 & 3\\1 & 2 & 3\end{bmatrix}\;B_3 = \begin{bmatrix}1\\2\\3 \end{bmatrix}

A1​=⎣

⎡​123​⎦

⎤​B1​=⎣

⎡​456​⎦

⎤​A2​=[13​24​]B2​=[57​68​]A3​=[11​22​33​]B3​=⎣

⎡​123​⎦

⎤​

A

1

B

1

=

[

4

5

6

8

10

12

12

15

18

]

T

A_1 \otimes B_1={\begin{bmatrix}4 & 5 & 6 & 8 &10 & 12 & 12 & 15&18\end{bmatrix}}^T

A1​⊗B1​=[4​5​6​8​10​12​12​15​18​]T

A

2

B

2

=

[

5

6

10

12

7

8

14

16

15

18

20

24

21

24

28

32

]

A_2 \otimes B_2 = \begin{bmatrix}5 &6&10&12 \\7 & 8&14&16\\15 & 18&20&24 \\21 &24&28&32\end{bmatrix}

A2​⊗B2​=⎣

⎡​571521​681824​10142028​12162432​⎦

⎤​

A

3

B

3

=

[

1

2

3

2

4

6

3

6

9

1

2

3

2

4

6

3

6

9

]

T

A_3\otimes B_3 = { \begin{bmatrix}1 & 2&3 &2&4&6&3&6 & 9\\1 & 2&3 &2&4&6&3&6 & 9\end{bmatrix}}^T

A3​⊗B3​=[11​22​33​22​44​66​33​66​99​]T

import numpy as np

A1 = np.array([1,2,3])

B1 = np.array([4,5,6])

A2 = np.array([[1,2],[3,4]])

B2 = np.array([[5,6],[7,8]])

A3 = np.array([[1,2,3],[1,2,3]])

B3 = np.array([1,2,3])

## 克罗内克积 使用np.kron

print(np.kron(A1,B1))

print(np.kron(A2,B2))

print(np.kron(A3,B3))

相关数据

阴茎无力什么原因
365比分

阴茎无力什么原因

⌛ 07-28 👁️ 1621
余额宝提款到账时间解析及快速到账技巧
365bet官网首页

余额宝提款到账时间解析及快速到账技巧

⌛ 07-17 👁️ 7874