原文 https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/
Why Numpy & Pandas?
- 运算速度快:C 语言编写
- 消耗资源少:矩阵运算
Numpy部分
Numpy 创建 array
np.array([1,2,3]) #list创建数组
np.array([-1,0,1,2],dtype=np.bool) #指定数据类型
np.zeros((1,2)) #参数应为元组 #全零数组
np.ones((1,2)) #全一数组
np.empty((1,2)) #全接近0的数组
np.arange(4)#[0,4) step=1
np.arange(1,4,2) #[1,4) step=2
np.linspace(1,4,2) #[1,4] num=50
Numpy array的属性
a=np.array([1,2,3])
a.ndim # 1 # 维度
a.shape # (3,) #一维就长这个样子,二维及以上才是行列数
a.size # 3 # 元素个数
Numpy 基础运算
import numpy as np
a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
b=np.arange(4) # array([0, 1, 2, 3])
算术运算
c=a-b # array([10, 19, 28, 37])
c=a+b # array([10, 21, 32, 43])
c=a*b # array([ 0, 20, 60, 120])
c=b**2 # array([0, 1, 4, 9])
函数运算
c=10*np.sin(a)
# array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
逻辑运算
print(b<3)
# array([ True, True, True, False], dtype=bool)
矩阵相关运算
a=np.array([[1,1],[0,1]])
# array([[1, 1],
# [0, 1]])
b=np.arange(4).reshape((2,2))
# array([[0, 1],
# [2, 3]])
np.dot(a,b) #矩阵乘法 亦 a.dot(b)
# array([[2, 4],
# [2, 3]])
np.transpose(a) #矩阵转置 亦 a.T
#array([[1, 0],
# [1, 1]])
统计运算
a=np.arange(1,4)#array([1,2,3])
np.sum(a) # 求和
np.min(a) # 最小
np.max(a) # 最大
np.mean(a) # 平均
np.average(a)# 平均 可提供权重的平均
np.median(a) # 中位数
mp.cumsum(a) # 累加 [1,3,6]
np.diff(a) # 前后差 [1,3,18]
np.sort(a) #排序 默认以最后的axis为轴
np.clip(a,b,c)# 裁剪 利用截断法使值域为[b,c]
按行列单元运算
a=np.arange(1,7).reshape(2,3)
np.sum(a,axis=1)#以行为单元进行sum [6,15]
np.min(a,axis=0)#以列为单元进行min [1,2,3]
np.max(a,axis=1)#以行为单元进行max [3,6]
索引运算
np.argmin(a) #最小元素所对应的索引
np.argmax(a) #最大元素所对应的索引
np.nonzero(a) #得到非零元素的行列坐标索引所分别构成的array所构成的元组
Numpy 访问
A=np.arange(3,15,1).reshape(3,4)
A[1][1] # 8
A[1, 1] # 8
A[1, 1:3] # array([8, 9])
for row in A: #逐行访问
for column in A.T: #逐列访问
for item in A.flatten():#逐元素访问 #array
for item in A.flat:#逐元素访问 #迭代器
Numpy array 合并
a=np.arange(1,4)
b=np.arange(4,7)
np.vstack((a,b))#垂直合并#参数为元组
np.hstack((a,b))#水平合并#参数为元组
np.newaxis is None #True 可以用来智能扩展维度
np.concatenate((a,b),axis=0)#0水平合并,1垂直合并
Numpy array 分割
#不要纠结于横纵向,(3,4) axis=0 对应3 axis=1 对应4
A = np.arange(12).reshape((3, 4))
np.split(A,3,axis=0)#均匀分割 3部分 横向
np.split(A,4,axis=1)#均匀分割 4部分 纵向
np.array_split(A,3,axis=1)#尽量均匀分割 3部分 纵向 2+1+1
np.vsplit(A,3)#横向均匀分割 3部分
np.hsplit(A,4)#纵向均匀分割 4部分
Numpy 真假拷贝
a=np.arange(4)
b=a # 起别名
c=a[:] # 假拷贝
d=a.copy() # 真拷贝