引言
好久没写帖子了,确实变懒了,在这一个月里学习了爬虫,还有seleium自动化技术初步以及数据分析中的numpy,下一步就要学习pandas,但是欠了太多帖子没写,所以现在来补一下,现在来的是numpy的学习!
一.什么是numpy
NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。
二.numpy操作
使用NumPy,开发人员可以执行以下操作:
-
数组的算数和逻辑运算。
-
傅立叶变换和用于图形操作的例程。
-
与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。
三.numpy中ndarry对象
NumPy 中定义的最重要的对象是称为 ndarray
的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。
ndarray
中的每个元素在内存中使用相同大小的块。 ndarray
中的每个元素是数据类型对象的对象(称为 dtype
)。
从ndarray
对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray
,数据类型对象(dtype
)和数组标量类型之间的关系。
四.创建一个ndarry对象
1.ndarry()
数组转化
l = [1,2,3,4,5]
n = np.ndarry(l)
print(type(n)) #ndarry
2.zeros(shape,dtype)
创建一个元素全为零的ndarry对象
n = np.zeros((2,2),dtype = np.int8)
print(n)
#[0,0
#0,0]
3. ones(shape,dtype)
创建一个元素全为一的ndarry对象
n = np.ones((2,2),dtype= np.int8)
print(n)
# [1,1
# 1,1]
4.full(shape,fill_value,dtype)
创建一个自定义填充物的ndarry对象
n = np.full((2,2),fill_value=4,dtype=np.int8)
print(n)
# [4,4
# 4,4]
5.eye(N,M,K=0,dtype)
创建一个对角线的矩阵,N为行数,M为列数(默认为行数),K为偏移量
n = np.eye(3,3,k=1,dtype= np.int8)
print(n)
# [ 0,1,0,
# 0,0,1,
# 0,0,0]
6.linspace(start,end,num,endpoint,retstep,dtyep)
创建一个等差数列ndarry对象
start和end:等差数列的头和尾
num:将等差数列中间的差值分割成为num份
endpoint:是否包含结束值
retstep:是否返回步长
n = np.linspace(5,20,15,dtype = np.int8)
print(n)
#[ 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20]
7.arange((start),end,(step),dtype =None)
类似python中的range函数,这样理解就好多了,创建一个数值范围的数组
n = np.arange(10)
print(n)
#[0 1 2 3 4 5 6 7 8 9]
8.random.randint(low,high,size,dtype)
创建一个任意形状的随机元素数组,简单来说就是可以创建元素随机的多维数组
low和hight代表随机数的最大值和最小值,size表示形状
n = np.random.randint(2,9,size= (4,4),dtype = np.int8)
print(n)
#[[2 3 7 4]
[5 2 5 8]
[8 4 2 5]
[2 2 7 6]]
9.random.randn(d0,d1,d2...)
创建一个服从标准正态分布的多维数组
正态分布是一个均值,其他值则在均值两侧呈现正态分布
n = np.random.randn(2,2)
print(n)
[[ 0.41904164 -1.77092805]
[ 0.71053412 -0.37183897]]
10.random.normal(loc=0.0,scale=1.0,size = None)
创建一个正态分布,
loc为均值,即正态分布中心
scale为标准差,标准差越大,正态分布越缓,标准差越大,正态分布越陡
n = np.random.normal(0,2,(2,2))
print(n)
#[[-0.2796318 -0.87402175]
[ 2.16434439 -0.43034606]]
11.random.random(size= None)
创建一个元素为0~1(左开右闭)的随机数集合
n = np.random.random((2,2))
print(n)
[[0.39221156 0.79644022]
[0.18058806 0.76382577]]
12.random.rand(d0,d2,d3...)
和上面一样,一个d代表一个维度,d0表示第一维度为多少
n = np.random.rand(2,2)
print(n)
#[[0.54617447 0.48065742]
[0.58453461 0.46653232]]
五.ndarry操作
1.索引
和正常数组一样,使用 数组名【索引】可以拿到该索引下面的值,也可以修改该索引下面的值
n = [ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
n[1][2] = n[1,2] =1 #两种写法
n = [ 1 2 3 4]
[ 5 6 1 8]
[ 9 10 11 12]
[13 14 15 16]
2.切片
类似于列表的切片 【start:end:step】
取一行: n[0]
连续取n行: n[a:n-a]
只取1,2,7行: n[1,2,7]
取一列: n[:,0]
连续取n列: n[:,a:n-a]
只取1,2,7列: n[:,[1,2,7]]
3.翻转
将行翻转或者将列翻转
行翻转: n[::-1]
列翻转: n[:,::-1]
4.修改形状
这里说的形状是多维数组,2*3,5*2就是两种形状 reshape(数组,size)
注意:修改后的形状所包含的元素要和原形状的元素数量保持一致
n = np.reshape(n,(2,2))
5.级联操作(合并操作)
级联操作主要使用的是concatenate((n1,n2),axis)函数,n1,n2分别为两个矩阵,axis决定哪个维度合并,0为行,1为列。还有两个少见的合并hstack()水平合并,vstack()垂直合并。
6.拆分(切分,切割)
和列表的类似,split(),hsplit()水平,vsplit()垂直
n = [ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
a = np.split(n,4)
print(a)
#[array([[1, 2, 3, 4]]),
array([[5, 6, 7, 8]]),
array([[ 9, 10, 11, 12]]),
array([[13, 14, 15, 16]])]
7.复制(拷贝,副本)
copy(),学过开发,没啥好说的
8.聚合函数
max 最大值
argmax 最大值下标
min 最小值
argmin 最小值下标
average 平均值
mean 平均值
median 中位数
percentile 百分位数
std 标准差
var 方差
argwhere 寻找某个数的所有下标
power 次方
#一些数学函数,到时候查找方便
abs 绝对值
sqrt 平方根
square 平方
exp 指数
log 对数
sin 正弦
cos 余弦
tan 正切
round 四舍五入
floor 向下取整
ceil 向上取整
cumsum 求和累加
六.矩阵操作
1.基本矩阵操作
加减乘除
n+10 n-10 n*10 n/10
2.矩阵积
注意:第一个矩阵的列数必须是第二个矩阵的行数
(2*3)*(3*5)=(2*5)
np.dot()
3.矩阵逆
了解内容
线性代数: np.linalg
矩阵逆: np.linalg.inv(n)
行列式: np.linalg.det(n)
矩阵的秩: np.linalg.matrix_rank(n)
4.广播机制
了解内容
- 规则一:为缺失的维度补齐维度
- 规则二:为缺失的元素用已有值取填充
m = [ 1,1,1 1,1,1] n = [0,1,2] m+n = [1,1,1 + [0,1,2 = [1,2,3, 1,1,1] 0,1,2] 1,2,3]
5.排序
np.sort() 不改变原数组
ndarry.sort() 改变原数组
6.文件操作
存:
save 保存数组到npy文件中
savez 将多个array保存到要给npz文件中
取:
load 读取npy文件
load("文件名.npz")['数组名'] 读取npz文件
csv和txt的读写操作
csv: np.savetxt("arr.csv",n,delimiter=',')
txt: np.savetxt("arr.txt",n)
读取: np.loadtxt('文件名')
结语
ok了啊,现在是北京时间23:35,写完睡觉,拜拜了,老铁们,奥对,今天是数据分析的小白,梦想是做月入过万的男人,明天我倒是看看有没有时间写一下seleium的帖子,mai起!