python的可学计算库 Numpy

来源:互联网 发布:大连淘宝培训班 编辑:程序博客网 时间:2024/06/07 18:34

【数据的含义】

一个数据那就是表达一个含义

一组数据(多个)呢 表达一个或者多个含义


[数据的维度]:
一组数据的组织形式
比如:一维线性关系 二维关系


一维数据:
由一组对等关系的数据组成(数据们大家的关系是同一个水平)。这组数据有序或者无序。采用线性方式组织


【数组和列表】
·基本的python没有数组概念 但是你可以使用库实现啊。引入数组类型从库里面。即ndarray。
    列表:内部的数据类型可以不同
    数组:内部的数据类型必须相同,必须为了就是内存的管理


二维数据:
由多个一维数据组成,是组合的类型,即多个一维的组合

------------------------------------------------------------------------------------------------------------

[数据维度的python表示]
一维数据:列表或者集合  有序=列表  集合=无序 也可以拓展为数组 引入库
二维数据:列表[[],[]]
多维数据:列表[[[],[]],[[],[]]]

高维数据:字典dict={
''=''
           }

-----------------------------------------------------------------------------------------------------------------
【目前常见的使用的就是Json XML】

 JSON:前后台

 XML:配置文件


----------------------------------------------------

【Numpy 科学技术库】
1.表示N维数组对象 ndarray
2.包含线性代数、傅里叶变换、随机数生成功能
3.是Scipy、pandas的基础

【ndarray N维数组对象的理解】
eg:计算A^2+B^2

传统
a = [1,2,3,4]
b = [5,6,7,8]
c = []
for x in range(len(a)):
c.append(a[i]**2 + b[i]**2)


ndarray (注意ndarray的别名是array 所以array本质是ndarray)
a = np.array([1,2,3,4])
b = np.array([5,6,7,8])
c = a**2 + b**2


·好处就是数组对象可以去掉运算的循环,使得一维向量更像单个数据
·ndarray底层是C写的 那么可以加大运算速度
·而且对于固定相同类型的适合,分配内存更有效率。内存对齐什么的。统一的类型的数组内存更高效。

-------------------------------------------------------------------------------------------------------------------
【ndarray即array的组成】
1.实际的一组数据 一堆数据
2.这些数据的描述信息(数据的维度、数据的类型)
    即 这些数据是几维的 什么类型的数组
3.下标都是从0开始 且数组类型相同
4.轴axis 就是存储数据的维(存储数据 一个轴就是一组数据) 
  秩ranK 即几维的?


[nadarry对象的属性]
.ndim 秩rank 即维度的数量/轴的数量 几维的?几轴的? 轴=维
  [[],
   []]  二维的 一维是2方向 二维是5个线性数据
.shape  对应矩阵 N行M列
   就是
.size  数据元素总个数 n*m个
.dtype 对象元素数据类型
   有('int32')('bool')('int8')('int16')('int64')
.itemsize  每个元素的大小 以字节K为单位


[ndarry为什么支持这么多数据类型]

这和C JAVA的类型一样  越精细越高效内存使用。合理分配 资源永远是匮乏的

就是内存和计算的合理安排内存空间 做到节约 精细 

内存对齐等等


[ndarray数组可以由非同类型数据构成 本质就是把这些不同的变成对象看 那么就有其实类型一样了]

 尽量少用 没意义


-----------------------------------------------------------------------------------

【ndarray数组的创建方法 4个大方法】
·从python的列表、元组等类型创建ndarray数组
x = np.array(list/tuple对象) 直接当参数转化
x = np.array(list/tuple对象.dtype=np.float32)指定长度 
x = np.array([[1,2],(1,2)])混合的也可以创建,只看维度和个数对称


有时候你需要 不指定他会直接计算 因为你的是同一类型数据


·通过Numpy的函数创建 入arange线性 ones全0 zeros全1 full(n) 全n值 eye(n) n*n正方形单位矩阵 对角线1,别的为0
x = np.arange(n)  一维线性数据递增 从0~n-1
x = np.arange(1,n) 从1~n-1  始终n-1
x = np.arange(1,n, 2) 其中第三个是步长 就是跨多少取一个1 3 5...
x = np.arange(n,2) 其中n>2那么生成为[]空的
x = np.ones(shape) 其中shape指定行列 如shape = (2,3) 2行3列
shape = tuple.append()其他计算得到 比如是(4,5,6,7)
x = np.zeros(shape) 那就是高纬个0 依次是一维=7 二维=6
x.shape 得到(4,5,6,7) 在最外层有4个元素 里面是5维度 再里面是6 再里面7
x = np.full((2,3),val) 就是生成一个shape的数组每个元素是val


x = np.ones_like(a)  把数组a的元素替换为为全1的数组
x = np.zeros_like(a) 数组a的元素全换成0
x = np.full_like(a,val) 全换成val值


x = np.linspace(n) 线性的生成 从0~n 生成的数据的个数 就是线性的哦
x = np.arange(1,n,2) 这个2是步长跨步 而linspace的是个数 总数几个它自己切分间隔


x = np,linspace(1,10,4) 生成默认是浮点的 因为科学计算数据一般都是浮点的整数是特例。
 1.,4.,7.,10.  其中就有个数4
x = np,linspace(1,10,4,endpoint=False)  
 1.,3.25,5.5,7.75 其中就不包含4


x = np.concatenate((a,b)) 这俩数组拼接为以一个 必须类型shape对应


·从字节流创建ndarray数组


·从文件里读取特定格式,创建ndarray数组
  一般是cvs

-----------------------------------------------------------
【ndarray数组对象的变换】:进行维度变换和元素类型变换
a = np.ones((2,3,4),dtype=np.int32)
a.reshape(shape) 不改变原来的数组 在原来的数据基础上得到一个新的shape的数组 是返回新的 不是原地修改
a.resize(shape) 和reshape一样 但是就地修改原数组
a.swapaxes(ax1,ax2) 数组n个维度俩维度进行调换
a.flatten() 对数组进行降维度,全部一次性折叠为一维的数组,返回新的数组。 原来数组的不变
a.tolist() 把这个ndarray数组变成一个list对象


【对数组的操作  索引/切片】
索引:数组特定伪造元素的过程
切片:获取数组元素子集的过程


[一维数组索引和切片]
a = np.array([1,2,3,4])
索引:
a[2]


切片: 
a[1:4:2]  1~4-1的元素 步长为2 


[多维的索引和切片]
索引:
a = np.arange(24).reshape((2,3,4)) 
  1.先是生成一个一维数组 然后转换格式为多维 得到新数组
a[1,2,3]记得从0开始数 就是最外层第2个里面的第3个里面的第4个
a[-1,-2,2] 倒数第1个里面的倒数第2个的第3个
负数是-1开始计数 正数记得是0开始计数

切片:


【数组的运算】本质是元素的运算
数组和标量之间的运算
  等价于 每个元素都运算
数组与标量之间的元素作用于数组的每一个元素。
a = np.arange(24).reshape((2,3,4)) 
a = a*2
a = a/a.mean()


一元函数的元素 还是每个元素都运算 都生成新的数组 要修改原来的就需要赋值


a.rint(x) 四舍五入
a.square(x) 平方
a.sart(x) 开方
a.modf9(x) 小数和整数部分返回俩个数组
a.cos(x)
a.sin(x)
a,tan(x)
a.exp(x) 指数
a.sign(x) 符号值求和 正=1 负=-1
...等等


二元函数 就是作用在俩个数组。


----------------------------------------------------------------------------------------------------------
【数据的csv 文件格式读取存储 】
[缺点] 只能存取一维和二维
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
frame 文件字符串或者产生器 'xx.csv'
array 存入文件的数组
fmt 写入文件的格式 %d整数 %f  %.1f一位小数 
dekimiter 分割字符串 比如常见的','
a = np.arange(20).reshape(4,5)
存入数据到csv
np.savetxt('a.csv',a,fmt='%.1f',delimiter=',')


从csv读取数据
b = np.loadtxt('a.csv',delimiter=',')
b = np.loadtxt('a.csv',type=np.int,delimiter=',')


【多维数据的存取】
a = np.arange(24).reshape(2,3,4)
存储
a.tofile('b.dat',seq=',',format='%d')

读取
np.fromfile('b.dat',dtype=np.int,seq=',').reshape(2,3,4)


---------------------------------------------------------------------------------------------
【Numpy里的random子库的随机数函数】
np.random.rand() 浮点数 范围[0,1) 均匀分布
np.random.rand() 一个随机数
np.random.rand(2,3) 2行3列的随机数
np.random.rand(shape)  范围[0,1)
np.random.randn() 正态分布
np.random.randn(3,4,5) 
np.random.randint() 随机范围
np.random.randint(100,200,(3,4)) 范围100-200 3行4列

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


----------------------------------------------------------------------------------
【np.random的统计函数】
其中axis均是可选参数。方法的重载。
sum(a,axis=哪一维) 
mean(a,axis=) 数学期望
average(a,axis=weights=None) 加权平均值
std(a,axis=None) 标准差
var(a,axis=None) 方差
min(a,axis=) 全部里的最小
max(a,axis=) 全部里的最大
median(a) 中位数

-------------------------------------------------------------
【np.random梯度函数】
梯度:就是连续值之间的变化率 即斜率
   例如:a,b,c3个坐标 b的梯度值=(c-a)/2
np.gradient()







原创粉丝点击