用python作数据分析第一个包numpy

主次主要讲的是numpy的经常使用函数,就对于我而言numpy的主要做用是建立数组和随机数和一些数学运算,处理数据由pandas去完成,画图也有其余包好比matplotlib,seaborn 首先来讲的是数组的建立,废话很少说看代码而后再来解释 一 array的建立python

ar_1=np.array([1,2,3,4,5])
ar_2=np.array([[1],[2],[3]])
复制代码

如图所示,array的做用就是本身手动建立本身想要的数组,像C同样去建立几维的数组有本身决定。多维数组ndarray,数组的维度称之为秩(rank),好比一数组的秩为1,二维数组的秩为2 一次类推

二 array函数的基本用法数组

print(ar_2.ndim)#输出数组秩的个数,结果为2
print(ar_2.shape)#能够理解为输出数组的形状,ar_2输出结果为(3,1)
print(ar_2.size)#输出数组元素的总数,ar_2的输出结果为3,(3*1=3)
print(ar_2.dtype)#输出数组的数据类型,(注意,type()是函数,而dtype是numpy的一个方法)

复制代码

三 array的不规则建立bash

ar3 = np.array([[1,2,3],('a','b','c')])   # 二维数组:嵌套序列(列表,元祖都可)
ar4 = np.array([[1,2,3],('a','b','c','d')])   # 注意嵌套序列数量不一会怎么样
复制代码

array里面的数据能够是元祖数组生成器等等,可是要注意的是,当array两个元祖或者数组的元素个数不同时,他是秩将会是一而不是二

四 利用arange()函数建立数组dom

print(np.arange(10))    # 返回0-9,整型
print(np.arange(10.0))  # 返回0.0-9.0,浮点型
print(np.arange(5,12))  # 返回5-11
print(np.arange(5.0,12,2))  # 返回5.0-12.0,步长为2
复制代码

看图片能够知道,当只给出一个参数时,生成的数从0开始 两个参数则数左闭右开的数组范围 三个参数时,第三个表明的是步长,也就是说在5到11这些数字中,当步长为2时,他会开始数,第一个数字5,走两步是7再走两步是9一次类推

函数linspace,zeros,ones,eyes函数

#np.linspace在2-3之间等距离去10个数
ar0 = np.linspace(2.0, 3.0,10)
print(ar0)
#np.zeros()生成所有为0的矩阵
ar1 = np.zeros(5)  
ar2 = np.zeros((2,2), dtype = np.int)
print(ar1,ar1.dtype)
print(ar2,ar2.dtype)
print('------')
#zeros_like()根据其余数组的维度来建立0矩阵
ar3 = np.array([list(range(5)),list(range(5,10))])
ar4 = np.zeros_like(ar3)
print(ar4)
#np.ones跟zeros相似就不讲了
ar5 = np.ones((3,3))#注意有两个括号
ar7 = np.ones_like(ar3)
print(ar5)
print(ar7)
#建立对角矩阵
复制代码

着几个函数了解就行也不难记住

# 矩阵形状的改变与转置:.T/.reshape()/.resize()工具

# 数组形状:.T/.reshape()/.resize()

ar2 = np.ones((5,2))
print(ar2,'\n',ar2.T)
# .T方法:转置,例如原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 因此一维数组转置后结果不变

ar4 = np.zeros((4,6)).reshape(3,8)   # 用法2:生成数组后直接改变形状
ar5 = np.reshape(np.arange(12),(3,4))   # 用法3:参数内添加数组,目标形状
#reshape改变数组的形状,可是要注意的是使用reshape矩阵的元素个数得相同

ar6 = np.resize(np.arange(5),(3,4))
print(ar6)
# numpy.resize(a, new_shape):返回具备指定形状的新数组,若有必要可重复填充所需数量的元素。
# 注意了:.T/.reshape()/.resize()都是生成新的数组!!!
复制代码

数组的拷贝(深复制和浅复制)ui

# 数组的深复制

ar1 = np.arange(10)
ar2 = ar1
print(ar2 is ar1)
ar1[2] = 9
print(ar1,ar2)
# 回忆python的赋值逻辑:指向内存中生成的一个值 → 这里ar1和ar2指向同一个值,因此ar1改变,ar2一块儿改变
# 数组的浅复制
ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
# copy方法生成数组及其数据的完整拷贝
复制代码

能够看到直接复制的话两个变量是指向同一个地址的,也就是说ar1,ar2任意一个数组改变都会使两个变量一块儿改变,输出结构ar1 is ar2结构为TRUE 。当使用copy()函数复制时,两个建立了新的数组,也就是说这两个数组的地址指向不一样,因此两个数组在物理地址上来讲没有任何关系,也就说他们两个是互不影响的。

数组的简单运算spa

#astype()
ar=np.arange(10)
ar.astype(np.float)
#转换数组的数据类型

#数组要是整型或者浮点型,当数组进行运算时,全部的数字都会改变
print(ar+2)#结果为[2,3,4,5,6,7,8,9,10,11]
print(ar-2)
print(ar*2)
print(ar/2)
print(ar**2)

print(ar.mean())  # 求平均值
print(ar.max())  # 求最大值
print(ar.min())  # 求最小值
print(ar.std())  # 求标准差std
print(ar.var())  # 求方差var
print(ar.sum(), np.sum(ar,axis = 0))  # 求和,np.sum() → axis为0,按列求和;axis为1,按行求和
print(np.sort(np.array([1,4,3,2,5,6])))  # 排序
复制代码

切片的内容跟字符串切片的相似我就不讲了3d

数组的堆叠与拆分code

水平堆叠

a = np.array([[1],[2],[3]])   # a为二维数组,3行1列
b = np.array([['a'],['b'],['c']])  # b为二维数组,3行1列
ar2 = np.hstack((a,b))  # 注意:((a,b)),这里形状必须同样
#注意水平堆叠时,两个数组的秩必须相同。可是觉得数组是例外,不同也能够
复制代码

垂直堆叠

a=np.arange(2,5)
b=np.arange(5,8)
ar1=np.vstack((a,b))
#两个数组的秩必须相同,长度能够不一样
复制代码

总结:在进行堆叠时,必须保证两个数组的维度相同,水平堆叠时数组的形状必须相同,竖直堆叠时,西航渡能够不同

拆分

s=np.arange(16).reshape(4,4)
ar1=np.hspilt(s,4)
#水平拆分,注意拆分后为list,也就是说numpy的函数,shape,等方法不可用

竖直拆分
ar2=np.vsplit(s,4)
#拆分后同样为list
复制代码

随机数的生成

随机数的生成是进行数据分析的重要辅助工具,须要重点掌握

一:符合正太分布的随机数

ran=np.random.normal((4,4))
# 生成一个标准正太分布的4*4样本值

# randn
sample1=np.random.rand(10)
sample2=np.random.randn(10,4)
#生成一个符合正太分布的样本,参数里面的数字是数组的形状
复制代码

二 符合均匀分布的随机数

#rand函数

a=np.random.rand()
b=np.random.rand(4)
c=np.random.rand(2,3)
#生成一个符合正太分布的样本,参数里面的数字是数组的形状

#randint函数

flag=np.random.randint(low=4,high=10,size=10)
#生成10个4-9之间的随机数,符合均匀分布,而且随机数只能整型
#记住low的值不能大于high,
t=np.random.randint(3)
#生成一个0-2之间的随机数

复制代码

大概numpy比较经常使用的函数就在这里啦,但愿能帮到大家呀

要想本身熟悉使用必定要本身动手去作,可能别人写代码永远都是别人的

相关文章
相关标签/搜索