python数据分析-numpy相关操作复习3-4

目录

3.数学运算

4.broadcasting

3.数学运算

3.1逐个元素的运算:

可以进行基本的加减乘除,这里只列举两种

3.1.1逐个元素求和
x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)
print(x)
print(y)
#out<<
[[1. 2.]
 [3. 4.]]
[[5. 6.]
 [7. 8.]]
#直接对应相加
x + y
#out<<
array([[ 6.,  8.],
       [10., 12.]])
#直接调用函数相加
np.add(x,y)
#out<<
array([[ 6.,  8.],
       [10., 12.]])
3.1.2逐元素作差
#x - y
#np.substract(x,y)

3.2矩阵的乘法运算

3.2.1 求向量內积
v = np.array([9,10])
w = np.array([10,11])
#方法1
v.dot(w)
#out<<
200
#对应元素相乘后相加 9*10 +10*11 = 200
#方法2
np.dot(x,w)
#out<<
200
3.2.2 求矩阵乘法
x = np.array([[1,2], [3,4]])
y = np.array([[5,6], [7,8]])
#x.dot(y)
np.dot(x,y)
#out<<
array([[19, 22],
       [43, 50]])
np.dot(y,x)
#out<<
array([[23, 34],
       [31, 46]])
#注意顺序不同,结果不同
3.2.3 求矩阵转置
x = np.array([[1,2], [3,4]])
x.T
array([[1, 3],
       [2, 4]])
#高维的tensor也可以做转置
#难点
arr = np.arange(16).reshape(2,2,4)#生成2个2行4列的矩阵
print(arr, arr.shape)
#out<<
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]] (2, 2, 4)

print(arr.transpose((1,0,2)))#注意默认为0,1,2,即为x,y,z轴
[[[ 0  1  2  3]
  [ 8  9 10 11]]

 [[ 4  5  6  7]
  [12 13 14 15]]]

以4为例,4原来坐标为(0,1,0),经过变换之后,x轴与y轴交换,即4的坐标变换为(1,0,0)
#便是现在的位置

 a = np.arange(8).reshape(2,2,2)
np.swapaxes(a,2,0)#等价于np.transpose(a,(2,1,0))
#out<<
array([[[0, 4],
        [2, 6]],

       [[1, 5],
        [3, 7]]])
#np.matmul()
a = np.arange(2*2*4).reshape((2,2,4))
b = np.arange(2*2*4).reshape((2,4,2))
c = np.arange(1*2*4).reshape((1,4,2))
np.matmul(a,b)
np.matmul(a,c)
#out<<
[[[ 28  34]
  [ 76  98]]
 [[428 466]
  [604 658]]]
  
  [[[ 28  34]
  [ 76  98]]
 [[124 162]
  [172 226]]]

np.matmul(a,b)则会将a的第一个矩阵和bb的第一个矩阵相乘,将a的第二个矩阵b的第二个矩阵相乘,最终得到一个2×2×2的结果
同理,同样对于c,它会被理解成一个4×2的矩阵的stack,对于np.matmul(a,c),则会广播c的一个矩阵,将a的第一个矩阵和第二个矩阵分别与c的一个矩阵相乘最终得到一个2×2×2的结果

#矩阵内元素求和 np.sum()函数
x= np.array([[1,2], [3,4]])
#print(np.sum(x))
print(x.sum())
#out<<
10
#对每一列求和
print(np.sum(x,axis = 0))
#out<<
[4 6]
#对每一行求和
print(np.sum(x,axis = 1))
#out<<
[3 7]
#np.mean()#求平均值
print(np.mean(x))
print(np.mean(x, axis=0))
print(np.mean(x, axis=1))
#out<<
2.5
[2. 3.]
[1.5 3.5]
#cumsum()
print(x.cumsum(axis=0))#每一列往下加
print(x.cumsum(axis=1))#每一行往右加
#out<<
[[1 2]
 [4 6]]
[[1 3]
 [3 7]]
 #cumprod()
print(x.cumprod(axis=0))#每一列往下乘
print(x.cumprod(axis=1))#每一行往右乘
#out<< 
[[1 2]
 [3 8]]
[[ 1  2]
 [ 3 12]]
#数组排序sort()
arr = np.random.randn(8) * 10
print(arr)
#out<<
[ -6.24660201 -15.58258586   1.15676204  11.54353536  13.8556186
  -6.89290567 -12.91138002  12.821078  ]
arr.sort()
print(arr)
#out<<
[-15.58258586 -12.91138002  -6.89290567  -6.24660201   1.15676204
  11.54353536  12.821078    13.8556186 ]
#二维数组也可以在某些维度上排序
arr = np.random.randn(5,3) * 10
print(arr)
#out<<
[[ -0.02512307  17.20191497   0.74223841]
 [-17.27291867 -13.00197112  -5.92251587]
 [ -5.59044821  -8.86042079  -3.41354389]
 [ 19.03995704  -5.91193954  -1.3943038 ]
 [ -3.69189399  11.19939905 -13.96774803]]
 #按照行排序
 arr.sort(1)
 #arr.sort(0)按照列排序
 print(arr)
 #out<<
 [[ -0.02512307   0.74223841  17.20191497]
 [-17.27291867 -13.00197112  -5.92251587]
 [ -8.86042079  -5.59044821  -3.41354389]
 [ -5.91193954  -1.3943038   19.03995704]
 [-13.96774803  -3.69189399  11.19939905]]
#找出排序后位置在5%的数字
large_arr = np.random.randn(1000)
large_arr.sort()
print(large_arr[int(0.05*len(large_arr))])
#out<<
-1.811993526121341

4.Broadcasting

x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])
v = np.array([1,0,1])
print(x)
print()
print(v)
#out<<
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

[1 0 1]
#赋值x格式给y
y = np.empty_like(x)
print(y)
#out<<
[[0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]]
a = np.arange(3)
print(a)
#out<<
[0 1 2]
a + 5#broadcasting每一个元素都要加
#out<<
array([5, 6, 7])
b = np.ones((3,3)
print(b)
#out<<
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
c =np.arange(3)
print(c)
#out<<
[0 1 2]
print(b + c)
[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值