NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
一个强大的N维数组对象 ndarray
广播功能函数
整合 C/C++/Fortran 代码的工具
线性代数、傅里叶变换、随机数生成等功能
为什么用NumPy ?
比Python自带的数据类型执行速度更快,占用内存更小
t.shape()
查看数据的维度
t.reshape()
重置数据维度 返回值返回重置后的数据,对原始数据不做任何操作
t.flattem()
展开数组 变为1维
t.transpose()
t.T
t.swapaxes(1,0)
数组转置(行列互转)
数组的广播
广播的规则:
让所有输入数组都向其中形状最长的数组看齐,形状中不足的部分都通过在前面加 1 补齐。
输出数组的形状是输入数组形状的各个维度上的最大值。
如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为 1 时,这个数组能够用来计算,否则出错。
当输入数组的某个维度的长度为 1 时,沿着此维度运算时都用此维度上的第一组值。
**简单理解:**对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
数组拥有相同形状。
当前维度的值相等。
当前维度的值有一个是 1。
numpy读取csv数据
loadtxt 默认读取格式为float,unpack 行列转置
nompy基础数据操作
import numpy as np
#使用numpy 生成数组
t1=a=np.array([1,2,3])
print(t1)
print(type(t1))
t2=np.array(range(10))
print(t2)
t3=np.arange(10)
print(t3)
print(t3.dtype)
t4=np.array([1,2,0,3,0],dtype="bool")
print(t4)
print(t4.dtype)
t5=t4.astype("int8")
print(t5)
print(t5.dtype)
#
t6=np.arange(18).reshape(3,3,2)
print(t6)
t7=np.arange(6).reshape(3,2)
print(t7)
print(t6+t7)
#转置
t10=np.arange(24).reshape(4,6)
print(t10)
print(t10.transpose())
print(t10.T)
print(t10.swapaxes(1,0))
行列操作
mport numpy as np
us_path="./data/USvideos.csv"
t1 = np.loadtxt(us_path,delimiter=",",dtype="int")
print(t1)
print("-"*100)
#取行 取第三行 行号从0开始
print(t1[2])
#取行 指定多行
print(t1[[2,4,6]])
#取列
print(t1[:,0])
#取列 指定多行
print(t1[:,[1,3]])
#取指定行列 3行 4列
print(t1[2,3])
#取多行多列区域 2-5行,2-3列 (5行 3列不含,起始为0行0列)
print("-"*100)
print(t1[1:5,1:3])
#取多个不相邻的点 为对角线(0,0)(1,1) (2,2) (3,3)
print(t1[[0,1,2,3],[0,1,2,3]])
链接操作
import numpy as np
us_path1="./data/MyCSV1.csv"
us_path2="./data/MyCSV2.csv"
t1 = np.loadtxt(us_path1,delimiter=",",dtype="int")
t2 = np.loadtxt(us_path2,delimiter=",",dtype="int")
#垂直拼接
t3=np.vstack((t1,t2))
print(t3)
#水平拼接
t4=np.hstack((t1,t2))
print(t4)
#拼接后 如果区分内容呢?
#创建一个t1标记类型数
t1sign=np.zeros((t1.shape[0],1)).astype("int")
t2sign=np.ones((t2.shape[0],1)).astype("int")
#链接
t1=np.hstack((t1,t1sign))
t2=np.hstack((t2,t2sign))
t5=np.vstack((t1,t2))
print("*"*100)
print(t5)
print("*"*100)
#全0数组
np.zeros((2.3))
#全1数组
np.ones((2.3))
#对角线为1的正数组
np.eye(3)
#t.cope() t1=2 均为深拷贝
附录
MyCSV1.csv数据集
111,112,113,114
121,122,123,124
131,132,133,134
MyCSV2.csv数据集
211,212,213,214
221,222,223,224
231,232,233,234
USvideos.csv数据集
4394029,320053,5931,46245
7860119,185853,26679,0
5845909,576597,39774,170708
2642103,24975,4542,12829
1168130,96666,568,6666
1311445,34507,544,3040
666169,9985,297,1071
1728614,74062,2180,15297
1338533,69687,678,5643
1056891,29943,878,4046
859289,34485,726,1914
452477,28050,405,2745
258781,8085,303,726
274358,9215,477,838
473691,14740,415,1696
514972,18936,641,3817
282858,14870,300,1398
1582683,65749,1531,3598
479951,23945,640,1941
2693468,7941,302,1432
815608,66420,3578,5550
382525,1521,270,1168
703750,2921,2196,1042
255967,21817,293,2017
96872,3498,482,439
743947,6126,352,2438