pandas 机器学习 人工智能 等的底层支持
主要内容:
python数组操作
numList = list(range(1,10))
numList
numList**0.5 #error!
newNumList = []
for n in numList:
newNumList.append(n**0.5)
newNumList
用numpy 做数组操作
import numpy as np
np.arange(1,10)
arr = np.arange(1,10)**0.5
arr.dtype #描述元数据
np.arange(1,121).reshape((2,3,4,5))**0.5 #四维数组
data1 = list(range(10,20,2))
data1
arr1 = np.array(data1) #将集合类型转换成ndarray类型
type(arr1)
arr2 = np.arange(1,22).reshape(3,7)
arr2
arr2[0]
arr2[0][3] #python、numpy通用
arr2[0,3] # numpy独有
获取ndarray对象的维度
arr1.ndim,arr2.ndim
获取行列信息
arr2.shape
arr1.shape
创建数组类型
np.ones((3,5)) #默认数据类型为float
np.ones((3,5),dtype=np.str_) #显示设置数据类型
dtype(数据类型) 将一块内存解释为特定数据类型所需信息
模拟:产品名称、产品销量、产品单价、生产厂家
t = np.dtype([('name',np.str_,40),('nums',np.int32),('price',np.float32),('company',np.str_,40)])
t
sqldata = [('小米 Mix 2手机',20000,1999.00,'小米科技'),('华为honor 12手机',30000,2999,'华为集团')]
type(sqldata)
#np.array(sqldata) #数据默认字符串类型
test = np.array(sqldata,dtype=t) #为了节约空间大小,float小数点后若是0就不显示
test
linspace() 产生等间隔值
np.linspace(1,10) #产生1-10之间的等间隔值
np.linspace(1,10,8) #产生8个1~10之间的等间隔值
np.linspace(1,10,8,endpoint=False) #不包含最后一个间隔值
定义两个矩阵:
data1 = np.arange(1,13).reshape((3,4))
data1
data2 = np.arange(13,25).reshape((3,4))
data2
矩阵元素相乘(可做加、减、乘、除、取模等运算)
data1*data2
矩阵元素求倒数
1/data2
选取数据子集或单个元素
arr3 = np.arange(20)
arr3[3:5] = 20
arr3
原理:将切片赋给一个变量时,给的是一个映射视图,实际上变量与原数据是挂钩的,映射数据改变时,原数据发生同步改变。(深拷贝和浅拷贝)
cellData = arr3[5:11]
cellData[:] = 333
cellData
**输出:
array([333, 333, 333, 333, 333, 333])
arr3
**输出:
array([ 0, 1, 2, 20, 20, 333, 333, 333, 333, 333, 333, 11, 12,
13, 14, 15, 16, 17, 18, 19])
可以看见,arr3对应位置的数值发生了改变
copy() 拷贝
arr4 = np.arange(20)
arr4
copyData = arr4[4:11].copy()
copyData[:] = 333
copyData
**输出:
array([333, 333, 333, 333, 333, 333, 333])
arr4
**输出:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
tdata = np.arange(1,21).reshape((4,5))
tdata.transpose()
tdata.T #矩阵转置,功能同上
tdata.resize((2,10))
tdata
**输出:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
tdata.shape = (4,5)
tdata
**输出:
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20]])
import numpy as np
arr2d = np.arange(1,25,2).reshape((3,4))
arr2d
arr2d[1,2:]
arr2d[2,1]
arr2d[2,:1]
arr2d[:,1]
arr2d[:2,1:3]
arr2d[:,1::2]
默认线性:纵向
HTML中的左右表格合并:列合并 上下表格合并:行合并
moni_citys = np.array(['SH','BJ','CQ','SH','BJ','BJ','CQ'])
moni_citys
moni_data = np.random.randn(7,8)*2 #正态分布高斯样本值
moni_data
moni_citys == 'BJ' #关系运算,返回bool类型
moni_data[moni_citys == 'BJ']
moni_data[moni_citys == 'BJ',2:]
做逻辑运算:
moni_citys != 'BJ'
moni_citys > 'BJ'
moni_data >= 2.5
moni_data[moni_data < 2.5] = 0
moni_data
moni_data[moni_data > 3] = 2
moni_data
类似数据库查询推断 where stu_id == ‘’ 后台程序筛选:读取stu_id,从上往下走,如果判断成立,true,保留;如果判断不成立,false,忽略。
data = np.arange(100).reshape((10,10))
data[[3,0,4,2]]
data[[3,0,4,2],[5,7,6,1]]
data[[3,0,4,2]][:,[5,7,6,1]] # :找出的行都保留 ,列按照要求排列
NumPy数组有:水平组合、垂直组合、深度组合