基本数据结构
import numpy as np
ar=np.array([1,2,3,4])
print(ar)
# [1 2 3 4]
print(ar.ndim) # 轴数
# 1
print(ar.size) # 元素数量
# 4
print(ar.dtype) # 元素类型
# int64
print(np.arange(1, 10, 1)) # 随机数
# [1 2 3 4 5 6 7 8 9]
print(np.linspace(1, 2, num=4)) # 均匀间隔生成随机数
# [1. 1.33333333 1.66666667 2. ]
print(np.zeros((3, 3), dtype=np.int)) # 元素为多维数组
# [[0 0 0]
# [0 0 0]
# [0 0 0]]
ar2 = np.array([list(range(5)), list(range(5, 10))])
print(ar2)
# [[0 1 2 3 4]
# [5 6 7 8 9]]
ar3 = np.zeros_like(ar2) # 元素为多为复制数组
print(ar3)
# [[0 0 0 0 0]
# [0 0 0 0 0]]
print(np.eye(5)) # 单位矩阵
# [[1. 0. 0. 0. 0.]
# [0. 1. 0. 0. 0.]
# [0. 0. 1. 0. 0.]
# [0. 0. 0. 1. 0.]
# [0. 0. 0. 0. 1.]]
索引及切片
import numpy as np
ar=np.arange(20) # 一维数组
print(ar, ar[4])
# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 4
print(ar[4:7]) # 切片,左闭右开
# [4 5 6]
ar=np.arange(16).reshape(4, 4) # 二维数组
print(ar)
#[[ 0 1 2 3]
#[ 4 5 6 7]
#[ 8 9 10 11]
# [12 13 14 15]]
print(ar[:2,1:]) # 切片
# [[1 2 3]
# [5 6 7]]
print(ar[2])
# [ 8 9 10 11]
ar=np.arange(8).reshape(2,2,2) # 三维数组
print(ar[0])
# [[0 1]
# [2 3]]
print(ar[0][0])
# [0 1]
print(ar[0][0][1])
# 1
ar=np.arange(10)
b=ar.copy() # 复制,传值
b[7:9]=200
print(ar)
# [0 1 2 3 4 5 6 7 8 9]
print(b)
# [ 0 1 2 3 4 5 6 200 200 9]
随机数
import numpy as np
sample=np.random.normal(size=(4,4)) # 正态分布随机数
print(sample)
# [[-1.5532405 2.23826961 -1.28646975 1.13127686]
# [-1.07603604 -1.3182315 -1.26062821 1.68190304]
# [ 0.49637228 0.98560157 1.12290671 0.03064749]
# [ 0.12426356 -1.40515829 -1.20611192 -1.52726703]]
b=np.random.rand(4) # 4个[0,1)的随机浮点数,均匀分布
print(b, type(b))
# [0.42470664 0.79146676 0.206857 0.2763579 ] <class 'numpy.ndarray'>
c=np.random.rand(2, 3) # 2*3个[0,1)的随机浮点数,均匀分布
print(c, type(c))
# [[6.34458376e-01 7.28915709e-04 9.32725498e-01]
# [7.77514138e-01 8.82439955e-01 7.94918012e-02]] <class 'numpy.ndarray'>
print(np.random.randint(2, 6, size=5)) # 随机整数
# [4 5 5 4 2]
print(np.random.randint(2, 6, (2,3))) # 随机整数,维度
# [[5 4 3]
# [2 2 2]]
常用函数
import numpy as np
ar=np.ones((5,2))
print(ar, ar.T)
#[[1. 1.]
# [1. 1.]
# [1. 1.]
# [1. 1.]
# [1. 1.]]
#
#[[1. 1. 1. 1. 1.]
# [1. 1. 1. 1. 1.]]
ar2 = np.resize(np.arange(5), (3,4)) # 重新定义形状
print(ar2)
# [[0 1 2 3]
# [4 0 1 2]
# [3 4 0 1]]
ar3=np.arange(10, dtype=float)
print(ar3, ar3.dtype)
# [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64
ar4=ar3.astype(np.int32) # 转换元素类型
print(ar4, ar4.dtype)
# [0 1 2 3 4 5 6 7 8 9] int32
a=np.arange(5)
b=np.arange(5,9)
ar1=np.hstack((a,b)) # 水平堆叠(按列),注意形状
print(a, b)
# [0 1 2 3 4]
# [5 6 7 8]
print(ar1, ar1.shape)
# [0 1 2 3 4 5 6 7 8] (9,)
a=np.arange(5)
b=np.arange(5,10)
ar2=np.vstack((a,b)) # 垂直堆叠(按列)
print(ar2, ar2.shape)
# [[0 1 2 3 4]
# [5 6 7 8 9]] (2, 5)
ar1=np.stack((a, b)) # 堆叠,轴为0按列
ar2=np.stack((a,b),axis=1)
print(ar1, ar1.shape)
# [[0 1 2 3 4]
# [5 6 7 8 9]] (2, 5)
print(ar2, ar2.shape)
# [[0 5]
# [1 6]
# [2 7]
# [3 8]
# [4 9]] (5, 2)
ar=np.arange(16).reshape(4, 4)
print(ar)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
ar1=np.hsplit(ar, 2) # 水平拆分,按列
print(ar1, type(ar1))
# [array([[ 0, 1],
# [ 4, 5],
# [ 8, 9],
# [12, 13]]),
# array([[ 2, 3],
# [ 6, 7],
# [10, 11],
# [14, 15]])]
# <class 'list'>
ar2=np.vsplit(ar,4)
print(ar2, type(ar2))
# [array([[0, 1, 2, 3]]),
# array([[4, 5, 6, 7]]),
# array([[ 8, 9, 10, 11]]),
# array([[12, 13, 14, 15]])]
#
# <class 'list'>
ar=np.arange(6).reshape(2,3)
print(ar+10)
# [[10 11 12]
# [13 14 15]]
print(ar*2)
# [[ 0 2 4]
# [ 6 8 10]]
print(1/(ar+1))
# [[1. 0.5 0.33333333]
# [0.25 0.2 0.16666667]]
print(ar**5)
# [[ 0 1 32]
# [ 243 1024 3125]]
print(ar.mean())
# 2.5
print(ar.max())
# 5
print(ar.min())
# 0
print(ar.std()) # 标准差
# 1.707825127659933
print(ar.var()) # 方差
# 2.9166666666666665
print(ar.sum(), np.sum(ar, axis=0)) # 求和,轴为0按列求和
# 15 [3 5 7]
print(np.sort(np.array([1,4,3,2,5,1])))
# [1 1 2 3 4 5]