Numpy库学习

1、array的属性

维度:.ndim

形状:.shape

大小:.size

import numpy as np

array = np.array([[1,2,3],[4,5,6]]) #把列表转化为array
print(array)
print('维度是:',array.ndim)
print('形状是:',array.shape)
print('大小是:',array.size)

结果:
[[1 2 3]
 [4 5 6]]  #没有逗号,(array)数组形式输出
维度是: 2
形状是: (2, 3)
大小是: 6

2、常见array的创建

mxn全零矩阵:.zeros((m,n))

import numpy as np

a = np.zeros((3,4),dtype=int) # dpyte是array的数据类型
print(a)

结果:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

mxn全一矩阵:.ones((m,n))

import numpy as np

b = np.ones((3,4))
print(b)

结果:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

mxn空矩阵:.empty((m,n))

import numpy as np

c = np.empty((3,4))
print(c)

结果:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

从a到b-1,以步长n生成array:.arange(a,b,n)

import numpy as np

d = np.arange(0,10,2)
print(d)

结果:
[0 2 4 6 8]

从a到b,生成n个元素的array:.linspace(a,b,n)

import numpy as np

e = np.linspace(2,20,10).reshape((2,5))
print(e)

结果:
[[ 2.  4.  6.  8. 10.]
 [12. 14. 16. 18. 20.]]

将一个array变成mxn的array:.reshape((m,n))

import numpy as np

f = np.arange(12).reshape((3,4))
print(f)

结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

3、numpy运算

矩阵运算

import numpy as np

a = np.array([[1,2],[3,4]])
b = np.arange(4).reshape((2,2))
print('加法:\n',a+b)
print('减法:\n',a-b)
print('点乘:\n',a*b)
print('矩阵乘法:\n',np.dot(a,b)) #也可用a.dot(b)
print('幂:\n',a**2)
print('转置:\n',a.T)

结果:
加法:
 [[1 3]
 [5 7]]
减法:
 [[1 1]
 [1 1]]
点乘:
 [[ 0  2]
 [ 6 12]]
矩阵乘法:
 [[ 4  7]
 [ 8 15]]
幂:
 [[ 1  4]
 [ 9 16]]
转置:
 [[1 3]
 [2 4]]

对矩阵行列的运算

import numpy as np

a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('行和:\n',np.sum(a,axis=1))
print('列和:\n',np.sum(a,axis=0))
print('最小:\n',np.min(a))
print('最小索引:\n',np.argmin(a))
print('行最小:\n',np.min(a,axis=1))
print('行最小索引:\n',np.argmin(a,axis=1))
print('最大:\n',np.max(a))
print('最大索引:\n',np.argmax(a))
print('列最大:\n',np.max(a,axis=0))
print('列最大索引:\n',np.argmax(a,axis=0))
print('平均数:\n',np.mean(a))
print('中位数:\n',np.median(a))
print('累加:\n',np.cumsum(a))
print('累差:\n',np.diff(a))
print('判断a是否为4:\n',a==4)
print('判断非0元素索引:\n',np.nonzero(a))

结果:
矩阵:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
行和:
 [ 3 12 21]
列和:
 [ 9 12 15]
最小:
 0
最小索引:
 0
行最小:
 [0 3 6]
行最小索引:
 [0 0 0]
最大:
 8
最大索引:
 8
列最大:
 [6 7 8]
列最大索引:
 [2 2 2]
平均数:
 4.0
中位数:
 4.0
累加:
 [ 0  1  3  6 10 15 21 28 36]
累差:
 [[1 1]
 [1 1]
 [1 1]]
判断a是否为4:
 [[False False False]
 [False  True False]
 [False False False]]
判断非0元素索引:
 (array([0, 0, 1, 1, 1, 2, 2, 2], dtype=int64), array([1, 2, 0, 1, 2, 0, 1, 2], dtype=int64))

数学函数

三角函数                   舍入函数
np.sin                     np.around(x,decimals = 保留的小数位数) # 四舍五入
np.arcsin                  np.ceil # 向上取整
指数函数                    np.floor # 向下取整
np.exp
np.exp2  # 2为底的指数     绝对值函数
对数函数                    np.abs
np.log # 自然对数
np.log2
np.log10

随机数

import numpy as np

a = np.random.random((2,2)) # 生成0-1的随机数,(注意他和.rand的不同,他是以元组输入)
b = 6 * np.random.rand(2,2) # 生成0-6的随机数
c = np.random.randint(0, 5, size=(2,3), dtype=np.int32) # 生成0-5的随机整数
d = np.random.randn(2,2) # 生成标准正态分布随机数
e = np.random.normal(0,2,6).reshape((2,3)) # 生成均值为0,标准差为2的6个正态分布随机数 
f = np.random.uniform(1,10,(2,3)) # 生成均匀分布的随机数
print('生成0-1的随机数:\n',a)
print('生成0-6的随机数:\n',b)
print('生成0-5的随机整数:\n',c)
print('生成标准正态分布随机数:\n',d)
print('生成均值为0,标准差为2的6个正态分布随机数:\n',e)
print('生成均匀分布的随机数:\n',f)

结果:(每次跑得的结果都不相同)
生成0-1的随机数:
 [[0.82675198 0.99958673]
 [0.77465162 0.64676349]]
生成0-6的随机数:
 [[1.04521646 0.53453153]
 [1.57494291 5.31186216]]
生成0-5的随机整数:
 [[0 4 2]
 [1 1 2]]
生成标准正态分布随机数:
 [[ 1.38281039  1.5231954 ]
 [-0.7637848   1.10431385]]
生成均值为0,标准差为2的6个正态分布随机数:
 [[-2.00167688  1.26613465  0.84036982]
 [-1.65738765 -0.58248741 -1.21392371]]
生成均匀分布的随机数:
 [[1.51396946 9.16544411 1.88673333]
 [9.39330129 2.20742571 1.06484693]]

随机数种子(np.random.seed)

只要种子数相同,就会得到相同的随机数。

import numpy as np

print('种子1的随机数:')
np.random.seed(1)
a = np.random.rand(2,2)
print(a)
np.random.seed(1)
b = np.random.rand(2,2)
print(b)
print('种子2的随机数:')
np.random.seed(2)
c = np.random.rand(2,2)
print(c)
np.random.seed(2)
d = np.random.rand(2,2)
print(d)

结果:
种子1的随机数:
[[4.17022005e-01 7.20324493e-01]
 [1.14374817e-04 3.02332573e-01]]
[[4.17022005e-01 7.20324493e-01]
 [1.14374817e-04 3.02332573e-01]]
种子2的随机数:
[[0.4359949  0.02592623]
 [0.54966248 0.43532239]]
[[0.4359949  0.02592623]
 [0.54966248 0.43532239]]

clip函数

import numpy as np

a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('矩阵中小于2的数等于2,大于6的数等于6:\n',np.clip(a,2,6))

结果:
矩阵:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
矩阵中小于2的数等于2,大于6的数等于6:
 [[2 2 2]
 [3 4 5]
 [6 6 6]]

numpy对array的操作

索引

import numpy as np

a = np.arange(9).reshape((3,3))
print('矩阵:\n',a)
print('a的1行:\n',a[0])
print('a的1行:\n',a[0,:])
print('a的3行2列:\n',a[2][1])
print('a的1列:\n',a[:,0])

结果:
矩阵:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
a的1行:
 [0 1 2]
a的1行:
 [0 1 2]
a的3行2列:
 7
a的1列:
 [0 3 6]

合并

import numpy as np

a = np.arange(9).reshape((3,3))
b = np.ones((3,3), dtype=np.int32)
print('矩阵a:\n',a)
print('矩阵b:\n',b)
print('上下合并:\n',np.vstack((a,b)))
print('左右合并:\n',np.hstack((a,b,a)))

结果:
矩阵a:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
矩阵b:
 [[1 1 1]
 [1 1 1]
 [1 1 1]]
上下合并:
 [[0 1 2]
 [3 4 5]
 [6 7 8]
 [1 1 1]
 [1 1 1]
 [1 1 1]]
左右合并:
 [[0 1 2 1 1 1 0 1 2]
 [3 4 5 1 1 1 3 4 5]
 [6 7 8 1 1 1 6 7 8]]

分割

import numpy as np

a = np.arange(9).reshape((3,3))
print('矩阵a:\n',a)
print('纵向均等分割:\n',np.vsplit(a,3))
print('横向均等分割:\n',np.hsplit(a,3)) # np.split只能均等分割
print('纵向不等分割:\n',np.array_split(a,2,axis=1))
print('横向不等分割:\n',np.array_split(a,2,axis=0))

结果:
矩阵a:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
纵向均等分割:
 [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
横向均等分割:
 [array([[0],[3],[6]]), array([[1],[4],[7]]), array([[2],[5],[8]])]
纵向不等分割:
 [array([[0, 1],[3, 4],[6, 7]]), array([[2],[5],[8]])]
横向不等分割:
 [array([[0, 1, 2],[3, 4, 5]]), array([[6, 7, 8]])]

复制

import numpy as np

a = np.arange(9).reshape((3,3))
print('矩阵a:\n',a)
b = a
a[2,1:3] = [10,11]
print('矩阵a改变,b随之改变:\n',b)
c = np.arange(9).reshape((3,3))
d = c.copy()
print('矩阵c改变,d不变:\n',d)

结果:
矩阵a:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]
矩阵a改变,b随之改变:
 [[ 0  1  2]
 [ 3  4  5]
 [ 6 10 11]]
矩阵c改变,d不变:
 [[0 1 2]
 [3 4 5]
 [6 7 8]]

参考

bibilili莫烦Python-Numpy & Pandas (数据处理教程)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值