numpy中数组narray的运算【(n,)x(n,m) (m,n)x(n,) (n,)x(n,) (n,)-(m,n) (m,n)-(n,) (n,)-(n,1) (n,1)-(n,)】


(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,)

加法法则同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值