Numpy库入门与学习

简介

1.numpy优势

开源科学计算库,用于快速处理多个维度的数组,使用简洁高效,使用ndarray对象处理多维数组,该对象是一个快速灵活的大数据容器。其运算速度快是基于内存块存储风格,并行化运算,底层语言
由C语言编写,不受python解释器的限制,解除了GIL。

2.ndarry属性

名字 解释
ndarry.shape 数组维度元组
ndarry.ndim 数组维度
ndarry.size 数组中元素数量
ndarry.itemsize 数组元素长度(字节)
ndarry.dtype 数组元素类型
a=np.array(
[
    [
        [1,2,3],[3,4,5]
    ],
    [
        [1,2,3],[4,5,6]
    ]
])
a.shape
输出为(2,2,3),几个维度几个数字,由嵌套情况得到shape
a=np.array([1,5,6],dtype="float32")
a.dtype
输入为dtype('float32'),此为指定数据类型的方式,不指定
的话,整形默认为int64,浮点为float64

3.基本操作

包括ndarray.方法()和np.函数名()两种方式
3.1生成数组的方法
  • 生成0和1
    np.zeros(shape)
    np.ones(shape)
    例如
np.zeros(shape=(3,4))
输出为array([[ 0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.]])
np.ones(shape=(2,4),dtype="float32")
输出为array([[ 1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.]], dtype=float32)
  • 从现有数组中生成
    np.array()和np.copy 深拷贝,会跟随元数组变化
    np.asarray() 浅拷贝,不会跟随原数组变化
  • 生成固定范围数组
    np.linspace(0,10,100)
    [0,10]之间等距100个数
    np.arange(a,b,c)
    类似range(a,b,c),[a,b]之间,c个步长
  • 生成随机数组
    np.random模块
    1.均匀分布
    np.random.uniform(low,high,size)
    例如
data1=np.random.uniform(low=-1,high=1,size=1000000)
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data1,1000)	#数据 组数
plt.show()

Numpy库入门与学习_第1张图片
2.正态分布
两个参数μ和σ,代表数据的平均值和标准差
np.random.normal(loc=0.0,scale=1.0,size=None)

data2=np.random.normal(loc=1.75,scale=0.1,size=1000000)
plt.figure(figsize=(20,8),dpi=80)
plt.hist(data2,1000)
plt.show()

Numpy库入门与学习_第2张图片

3.2案例(数组的切片索引)
随机生成8支股票2周的交易日数据
data3=np.random.normal(loc=0,scale=1,size=(8,10))

#获取第一个股票前3个交易日的数据  索引
data3[0,0:3]

#行列反转  形状修改
#data3.reshape(10,8)     #只是重新分割,返回新的数组,不改变原始数组
#data3.resize(10,8)        #无返回值,对原始的数据更改,重新分割
data3.T                           #数组转置
3.2数组类型修改

ndarray.astype(type) 如ndarray.astype(“int32”);
ndarray序列化到本地
ndarray.tostring()

3.2数组去重
temp=np.array(
[
    [1,2,3,4],
    [3,4,5,6]
])
np.unique(temp)
输出为array([1, 2, 3, 4, 5, 6])

4.ndarray运算

4.1逻辑运算
data4=np.random.normal(loc=1.75,scale=0.1,size=1000000)
#逻辑判断,涨跌幅大于0.5标记为True,否则为False
data4>0.5
#布尔索引
data4[data4>0.5]
4.2通用判断函数

np.all(bool)
有一个False则返回False,都是True返回True
np.any()
有一个True则返回True,都是False返回False

4.3三元运算符

np.where(bool,True位置的值,False位置的值)
根据bool将数组化为布尔数组,再根据后两个参数将数组变为相应的值。
复合逻辑运算:
np.logical_and()和np.logical_or()
例如 np.logical_and(temp>0.5,temp<1)
np.logical_or(temp<-0.5,temp>0.5)

将temp<-0.5和temp>0.5之间的数置为1,其余为0
np.where(np.logical_or(temp<-0.5,temp>0.5),1,0)

4.4统计运算
  1. 统计指标函数
    np.min(),np.max(),np.mean(),np.median(),np.var(),np.std()
temp=np.array(
[
    [1,2,3,4],
    [3,4,5,6],
    [5,7,1,4],
    [2,8,5,3]
])
#按列求最大值
temp.max(axis=0)
#按行求最大值
np.max(temp,axis=1)

返回最大值,最小值的索引
np.argmax(temp,axis=)
np.argmin(temp,axis=)

5.数组间运算

5.1数组与数运算
temp=np.array(
[
    [1,2,3,4],
    [3,4,5,6],
    [5,7,1,4],
    [2,8,5,3]
])
#数组中每一个数加一
temp+1
5.2数组与数组运算

需要满足广播机制,只有满足以下两种情况才可进行数组间运算

  • 维度相等
  • shape(其中相对应的地方为1)
    例如
    Numpy库入门与学习_第3张图片
    反例
    反例
    程序
    Numpy库入门与学习_第4张图片

6.矩阵运算

6.1矩阵–二维数组

存储方法

  • ndarray数组
  • matrix数据结构
temp3=np.array(
[
    [1,2],
    [3,4],
    [5,7],
    [2,8]
])
temp4=np.mat(
[
    [1,2],
    [3,4],
    [5,7],
    [2,8]
])
6.2矩阵乘法

形状:(m,n)*(n,l)=(m,l)
ndarray存储相乘的方法:

  • np.matmul()
  • np.dot()
    matrix存储相乘
  • matrix1*matrix2
#ndarray存储
temp3=np.array(
[
    [1,2],
    [3,4],
    [5,7],
    [2,8]
])
temp4=np.array(
[
    [1,2,3,4],
    [3,4,3,2],
])
np.matmul(temp3,temp4)
np.dot(temp3,temp4)

#matrix相乘
matrix1=np.mat(temp3)
matrix2=np.mat(
[    [1,2,3,4],
    [3,4,3,2],])
matrix1*matrix2

7.合并与分割

7.1合并
  • np.hstack(a1,a2) colum拼接
  • np.vstack(a1,a2) row拼接
  • np.concatenate((a1,a2,…),axis=0) //竖直拼接 列
  • np.concatenate((a1,a2,…),axis=1) //水平拼接 行
    Numpy库入门与学习_第5张图片
7.2分割
  • np.split()
    Numpy库入门与学习_第6张图片

8.IO操作与数据处理

8.1 读取文件

不适合读取,不支持字符串读取,一般用PANDAS

  • test=np.genfromtxt(“test.csv”,delimiter=’,’) 路径名 分隔符

你可能感兴趣的:(python,numpy,机器学习)