(n,)x(n,m) (m,n)x(n,) (n,)x(n,)
(n,)-(m,n) (m,n)-(n,) (n,)-(n,1) (n,1)-(n,)
乘法运算
一维乘法运算
#一维的
a = np.array([2,3,4]) #(3,)
b = np.array([1,2,3]) #(3,)
c = np.array([[1],[2],[3]]) #(3,1)
d = np.array([[1,2,3]]) #(1,3)
print("一维")
print("axb (3,)x(3, )=",a.dot(b).shape,a.dot(b)) #(3,)x(3,)=() 内积(即点积)
print("axc (3,)x(3,1)=",a.dot(c).shape,a.dot(c)) #(3,)x(3,1)=(1,) 内积? 都是1维,可以理解为内积
# print("cxa",c.dot(a)) #(3,1)x(3,) 报错
# print("axd",a.dot(d)) #(3,)x(1,3) 报错
print("bxa (3,)x(3, )=",b.dot(a).shape,b.dot(a)) #(3,)x(3,)=() 内积(即点积)
高维乘法运算
import numpy as np
#高维的
m = np.array([1,2,3]) #(3,)
n = np.array([[2,3,4],[3,4,5]]) #(2,3)
k = np.array([[2,3,4],[3,4,5],[4,5,6]]) #(3,3)
p = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,1]])#(3,4)
l = np.array([[2,3,4],[3,4,5],[4,5,6],[3,2,1]]) #(4,3)
print("\n高维")
# print("mxn",m.dot(n)) #(3,)x(2,3) 报错
print("mxk (3,)x(3,3)=",m.dot(k).shape,m.dot(k)) #(3,)x(3,3)=(3,) 矩阵乘法?
print("mxp (3,)x(3,4)=",m.dot(p).shape,m.dot(p)) #(3,)x(3,4)=(4,) 矩阵乘法?
# print("mxl",m.dot(l)) #(3,)x(4,3) 报错
print("lxm (4,3)x(3,)=",l.dot(m).shape,l.dot(m)) #(4,3)x(3,)=(4,) 这是啥?不想是矩阵乘法 内积?
乘法代码汇总
import numpy as np
#一维的
a = np.array([2,3,4]) #(3,)
b = np.array([1,2,3]) #(3,)
c = np.array([[1],[2],[3]]) #(3,1)
d = np.array([[1,2,3]]) #(1,3)
print("一维")
print("axb (3,)x(3, )=",a.dot(b).shape,a.dot(b)) #(3,)x(3,)=() 内积(即点积)
print("axc (3,)x(3,1)=",a.dot(c).shape,a.dot(c)) #(3,)x(3,1)=(1,) 内积? 都是1维,可以理解为内积
# print("cxa",c.dot(a)) #(3,1)x(3,) 报错
# print("axd",a.dot(d)) #(3,)x(1,3) 报错
print("bxa (3,)x(3, )=",b.dot(a).shape,b.dot(a)) #(3,)x(3,)=() 内积(即点积)
#高维的
m = np.array([1,2,3]) #(3,)
n = np.array([[2,3,4],[3,4,5]]) #(2,3)
k = np.array([[2,3,4],[3,4,5],[4,5,6]]) #(3,3)
p = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,1]])#(3,4)
l = np.array([[2,3,4],[3,4,5],[4,5,6],[3,2,1]]) #(4,3)
print("\n高维")
# print("mxn",m.dot(n)) #(3,)x(2,3) 报错
print("mxk (3,)x(3,3)=",m.dot(k).shape,m.dot(k)) #(3,)x(3,3)=(3,) 矩阵乘法?
print("mxp (3,)x(3,4)=",m.dot(p).shape,m.dot(p)) #(3,)x(3,4)=(4,) 矩阵乘法?
# print("mxl",m.dot(l)) #(3,)x(4,3) 报错
print("lxm (4,3)x(3,)=",l.dot(m).shape,l.dot(m)) #(4,3)x(3,)=(4,) 这是啥?不想是矩阵乘法 内积?
"""
总结:
(n,)类型的运算
设A.shape=(n,)
若A.dot(B) 即A·B
想要合法,必须要B的第一个维度为n 即(n,) x (n,m) B的第一个维度为n (m为任意自然数)
若B.dot(A) 即B·A
想要合法,必须要B的第二个维度为n 即(m,n)x (n,) B的第二个维度为n (m为任意自然数)
即连个n要靠近,才能够相乘
设A.shape = B.shape = (n,)
A·B = B·A = 内积(即点积)
"""
总结
(n,)类型的运算
设A.shape=(n,)
1、若A.dot(B) 即A·B
想要合法,必须要B的第一个维度为n 即==(n,) x (n,m) == B的第一个维度为n (m为任意自然数)
(n,) x (n,m)=(m,)
2、若B.dot(A) 即B·A
想要合法,必须要B的第二个维度为n 即==(m,n)x (n,)== B的第二个维度为n (m为任意自然数)
(m,n)x (n,)=(m,)
即连个n要靠近,才能够相乘
3、设A.shape = B.shape = (n,)
A·B = B·A = 内积(即点积)
(n,)x(n,)=()
加减法运算
一维加减法运算
import numpy as np
#一维加减法
a = np.array([2,3,4]) #(3,)
b = np.array([1,2,3]) #(3,)
c = np.array([[1],[2],[3]]) #(3,1)
d = np.array([[1,2,3]]) #(1,3)
print("一维加减法")
print("a-b (3,)-(3, )=",(a+b).shape,a+b) #(3,)-(3,)=(3,) 直接减
print("a-c (3,)-(3,1)=",(a-c).shape,"\n",a-c) #(3,)-(3,1)=(3,3) => (3,3)-(3,3)=(3,3) 最特殊的一个
"""
(3,)-(3,1)=(3,3) => (3,3)-(3,3)=(3,3)
[2,3,4] + [[1],[2],[3]] = [[1,1,1],[2,2,2],[3,3,3]] + [[2,3,4],[2,3,4],[2,3,4]] = [[3,4,5],[4,5,6],[5,6,7]]
"""
print("c-a (3,1)-(3,)=",(c+a).shape,"\n",c-a) #(3,1)-(3,)=(3,3) => (3,3)-(3,3)=(3,3) #同上 最特殊
print("a-d (3,)-(1,3)=",(a-d).shape,"\n",a-d) #(3,)-(1,3)=(1,3) => (1,3)-(1,3)=(1,3) #当做(1,3)处理
print("d-a (1,3)-(3,)=",(d-a).shape,"\n",d-a) #(1,3)-(3,)=(1,3) => (1,3)-(1,3)=(1,3) #当做(1,3)处理
#加法同理
高维加减法运算
import numpy as np
#高维加减法
m = np.array([1,2,3]) #(3,)
n = np.array([[2,3,4],[3,4,5]]) #(2,3)
k = np.array([[2,3,4],[3,4,5],[4,5,6]]) #(3,3)
p = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,1]])#(3,4)
l = np.array([[2,3,4],[3,4,5],[4,5,6],[3,2,1]]) #(4,3)
print("\n高维加减法")
print("m-n (3,)-(2,3)=",(m-n).shape,"\n",m-n) #(3,)-(2,3)=(2,3) => (2,3)-(2,3)=(2,3)
"""
(3,)-(2,3)=(2,3) => (2,3)-(2,3)=(2,3)
[1,2,3] - [[2,3,4],[3,4,5]] = [[1,2,3],[1,2,3]] - [[2,3,4],[3,4,5]] = [[-1,-1,-1],[-2,-2,-2]]
"""
print("m-k (3,)-(3,3)=",(m-k).shape,"\n",m-k) #(3,)-(3,3)=(3,3) => (3,3)-(3,3)=(3,3)
"""
(3,)-(3,3)=(3,3) => (2,3)-(2,3)=(2,3)
[1,2,3] - [[2,3,4],[3,4,5],[4,5,6]] = [[1,2,3],[1,2,3],[1,2,3]] - [[2,3,4],[3,4,5],[4,5,6]] = [[-1,-1,-1],[-2,-2,-2],[-3,-3,-3]]
"""
# print("m-p (3,)-(3,4)=",(m-p).shape,"\n",m-p) #(3,)-(3,4)=(4,) 报错
print("m-l (3,)-(4,3)=",(m-l).shape,"\n",m-l) #(3,)-(4,3)=(4,3) => (4,3)-(4,3)=(4,3) 计算同上
print("l-m (4,3)-(3,)=",(l-m).shape,"\n",l-m) #(4,3)-(3,)=(4,3) => (4,3)-(4,3)=(4,3) 计算同上
加减法代码汇总
import numpy as np
#一维加减法
a = np.array([2,3,4]) #(3,)
b = np.array([1,2,3]) #(3,)
c = np.array([[1],[2],[3]]) #(3,1)
d = np.array([[1,2,3]]) #(1,3)
print("一维加减法")
print("a-b (3,)-(3, )=",(a+b).shape,a+b) #(3,)-(3,)=(3,) 直接减
print("a-c (3,)-(3,1)=",(a-c).shape,"\n",a-c) #(3,)-(3,1)=(3,3) => (3,3)-(3,3)=(3,3) 最特殊的一个
"""
(3,)-(3,1)=(3,3) => (3,3)-(3,3)=(3,3)
[2,3,4] + [[1],[2],[3]] = [[1,1,1],[2,2,2],[3,3,3]] + [[2,3,4],[2,3,4],[2,3,4]] = [[3,4,5],[4,5,6],[5,6,7]]
"""
print("c-a (3,1)-(3,)=",(c+a).shape,"\n",c-a) #(3,1)-(3,)=(3,3) => (3,3)-(3,3)=(3,3) #同上 最特殊
print("a-d (3,)-(1,3)=",(a-d).shape,"\n",a-d) #(3,)-(1,3)=(1,3) => (1,3)-(1,3)=(1,3) #当做(1,3)处理
print("d-a (1,3)-(3,)=",(d-a).shape,"\n",d-a) #(1,3)-(3,)=(1,3) => (1,3)-(1,3)=(1,3) #当做(1,3)处理
#加法同理
#高维加减法
m = np.array([1,2,3]) #(3,)
n = np.array([[2,3,4],[3,4,5]]) #(2,3)
k = np.array([[2,3,4],[3,4,5],[4,5,6]]) #(3,3)
p = np.array([[1,2,3,4],[2,3,4,5],[3,4,5,1]])#(3,4)
l = np.array([[2,3,4],[3,4,5],[4,5,6],[3,2,1]]) #(4,3)
print("\n高维加减法")
print("m-n (3,)-(2,3)=",(m-n).shape,"\n",m-n) #(3,)-(2,3)=(2,3) => (2,3)-(2,3)=(2,3)
"""
(3,)-(2,3)=(2,3) => (2,3)-(2,3)=(2,3)
[1,2,3] - [[2,3,4],[3,4,5]] = [[1,2,3],[1,2,3]] - [[2,3,4],[3,4,5]] = [[-1,-1,-1],[-2,-2,-2]]
"""
print("m-k (3,)-(3,3)=",(m-k).shape,"\n",m-k) #(3,)-(3,3)=(3,3) => (3,3)-(3,3)=(3,3)
"""
(3,)-(3,3)=(3,3) => (2,3)-(2,3)=(2,3)
[1,2,3] - [[2,3,4],[3,4,5],[4,5,6]] = [[1,2,3],[1,2,3],[1,2,3]] - [[2,3,4],[3,4,5],[4,5,6]] = [[-1,-1,-1],[-2,-2,-2],[-3,-3,-3]]
"""
# print("m-p (3,)-(3,4)=",(m-p).shape,"\n",m-p) #(3,)-(3,4)=(4,) 报错
print("m-l (3,)-(4,3)=",(m-l).shape,"\n",m-l) #(3,)-(4,3)=(4,3) => (4,3)-(4,3)=(4,3) 计算同上
print("l-m (4,3)-(3,)=",(l-m).shape,"\n",l-m) #(4,3)-(3,)=(4,3) => (4,3)-(4,3)=(4,3) 计算同上
#必须要列的数量等于n,然后(n,)扩展为(m,n) m为另一个数组的行
#把(n,)复制n次作为n行
"""
总结:
(n,)类型的加法运算
设A.shape=(n,)
1、若B的列为n,则可以运算 即B.shape=(m,n) A-B 或 B-A
(n,)-(m,n)=(m,n) => (m,n)-(m,n)=(m,n) 把(n,)复制m次作为m行 即(m,n)
(m,n)-(n,)=(m,n) => (m,n)-(m,n)=(m,n) 把(n,)复制m次作为m行 即(m,n)
2、若B的列不为n,必须满足B.shape=(n,1),才可以运算(即必须是一维数组) A-B 或 B-A
(n,)-(n,1)=(n,n) => (n,n)-(n,n)=(n,n) (n,)复制n次作为n行(纵向复制),(n,1)复制n次作为n列(横向复制)
(n,1)-(n,)=(n,n) => (n,n)-(n,n)=(n,n) (n,)复制n次作为n行(纵向复制),(n,1)复制n次作为n列(横向复制)
3、若A.shape = B.shape = (n,) 则直接运算
(n,)-(n,)=(n,)
加法法则同上
"""
总结
总结:
(n,)类型的加法运算
设A.shape=(n,)
1、若B的列为n,则可以运算 即B.shape=(m,n) A-B 或 B-A
(n,)-(m,n)=(m,n) => (m,n)-(m,n)=(m,n) 把(n,)复制m次作为m行 即(m,n)
(m,n)-(n,)=(m,n) => (m,n)-(m,n)=(m,n) 把(n,)复制m次作为m行 即(m,n)
2、若B的列不为n,必须满足B.shape=(n,1),才可以运算(即必须是一维数组) A-B 或 B-A
(n,)-(n,1)=(n,n) => (n,n)-(n,n)=(n,n) (n,)复制n次作为n行(纵向复制),(n,1)复制n次作为n列(横向复制)
(n,1)-(n,)=(n,n) => (n,n)-(n,n)=(n,n) (n,)复制n次作为n行(纵向复制),(n,1)复制n次作为n列(横向复制)
3、若A.shape = B.shape = (n,) 则直接运算
(n,)-(n,)=(n,)
加法法则同上