飞桨“PaddlePaddle”实践学习笔记

numpy是一个高性能的科学计算和数据分析基础包,在现在的数据分析领域有很多应用

跟着飞桨学习深度学习实战过程中涉及很多numpy的知识,整理学习笔记打卡记录

numpy的使用

1 多维数组

1.1 创建多维数组

常用的创建方法是使用numpy中的array方法

import numpy as np
a=np.array([1,2,3])

在这里首先进行正常的导入包,使用as重命名为np,方便调用
 随后使用array方法,传入了一个列表,创建一个一维数组【1,2,3】赋值给变量a  
 同样的,我们可以改变参数值的列表数量创建高维数组

a=np.array([1,2,3],[4,5,6])

这里默认import语句的作用范围是全文的,所以下文不再重复引用  
 在这里我们传入两个列表,所以创建了一个两行三列的二维数组。赋值给a  
 对于全零或者全一等特殊数组,我们可以使用numpy提供的方法直接创建

np.ones([2,3]) #使用ones(维度)方法创建一个两行三列的全1数组,默认浮点数类型
np.zeros([3,4]) #使用zeros(维度)方法创建一个3行4列的全0数组
a=np.empty([2,3]) #使用empty(维度)方法创建一个2行3列的随机值数组
b=np.empty([3,4]) 
c=np.empty([4,5])

最后三行分别创建了三个二维数组,理论上内部是随机值,但是我们输出之后会发现一个很有趣的现象,数组a全是1.,数组b全是0,只有数组c是随机数,这里就涉及python内存调用的关系,在已经储存了满足维度要求的数组时,就不再产生随机数组,而是直接调用,比如第一行我们创建了维数【2,3】的全1.数组,再次要求创建维数【2,3】的随机数组时,就不会再创建,直接调用了第一行的结果,同样的,b赋值也是直接调用了第二行的全零数组,只有c赋值时,前文没有创建【4,5】维数的数组,才会生成随机数数组

1.2 多维数组常用属性

既然是属性,所以下面提到的这些是直接用“·”操作符获取而不用加括号的,不要和常用的方法记混。

1.2.1 ndim

返回数组维度,即二维数组返回 2,三维数组返回3

1.2.2 shape

返回数组维数,或者说是形状也行,2行3列就是(2,3)

1.2.3 size

返回数组元素个数

1.2.4 dtype

返回元素类型,默认用array创建时不声明类型就是默认浮点数,或者可以用dtype=np.int32等缺省参数声明类型

1.2.5 itemsize

返回元素字节大小计算方法是类型位数除以8,比如类型是float64,那元素字节就是64/8=8,如果是int32,那就是32/8=4

1.2.6 代码示例

a=np.array([1,2,3],[4,5,6])
print(a.ndim) #输出2
print(a.shape) #输出(2,3)
print(a.size) #输出6
print(a.dtype) #输出dtype(‘float64’)
print(a.itemsize) #输出8
a=np.ones([2,3],dtype=np.int32) # 规定数据类型为int32
print(a.dtype) # 输出dtype(‘int32’)
print(a.itemsize) # 输出4

1.2.7 数组的打印

可以通过print直接打印

1.3 多维数组基本操作

1.3.1 数组的算数运算

数组能够直接进行加减乘除运算,对应的结果是数组中对应位置元素的加减乘除结果

a=np.array([1,2,3])
b=np.array([4,5,6])
print(a+b) 
print(a-b)
print(a*b)
print(a/b)

飞桨“PaddlePaddle”实践学习笔记_第1张图片

对于矩阵来说,虽然表达形式上和多维数组相似,但是意义不同,矩阵也不存在除法运算,乘法运算的机制也不一样,即点积,用dot方法实现  ,而对于数组与常数(或者称之为标量)的加减乘除运算,也是直接对应个位置元素和常数的加减乘除运算

a=np.array([1,2,3])
b=np.array([4,5,6])
c=a.dot(b)
print(c)
print(1+a)
print(a-1)
print(a*2)
print(a/2)

输出如下图  
飞桨“PaddlePaddle”实践学习笔记_第2张图片

1.3.2 数组的自身运算

  • min找出最小值,
  • max找出最大值,
  • sum求和,

三者都可以参数传入axis=0或者1指定行或者列,0的时候计算每一列,1的时候计算每一行;

  • exp对元素进行指数运算,
  • sqrt对元素进行平方根运算,
  • square对元素进行平方运算,

三者都是np的方法,操作的数组作为参数传入,下面可以结合示例理解一下

d=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(d.min())
print(d.min(axis=0))
print(d.min(axis=1))
print(d.max())
print(d.sum())
print(d.sum(axis=0))
print(np.exp(d))
print(np.sqrt(d))
print(np.square(d))

飞桨“PaddlePaddle”实践学习笔记_第3张图片

1.3.3 随机数组

这个随机数组就是真正意义的随机了,不像empty方法会重复利用内存

  • seed: 随机因子,如果代码中确定了随机因子,那么随机的结果就确定了,再次执行不会改变值
  • rand: 生成0,1范围内满足均匀分布的随机样本
  • randn: 生成平均值为零且方差为1的正态分布随机样本
  • randint:在给定范围内生成类型为整数的随机样本数
  • binomial:生成指定维度满足二项分布的样本
  • beta:生成指定维度满足beta分布的样本
  • normal:生成指定维度满足高斯正态分布的样本
np.random.seed(42)
print(np.random.rand(2,3))
print(np.random.randn(2,3))
print(np.random.randint(1,10))
print(np.random.binomial(6,1))
print(np.random.beta(2,3))
print(np.random.normal(2,3))

飞桨“PaddlePaddle”实践学习笔记_第4张图片

1.3.4 索引,切片和迭代

对于一维数组来说,索引的相关操作和列表类似,对于高维数组来说,索引的参数个数拓展到多维,比如对一维数组a[0:4]这个操作就是输出前四个数,那么二维数组就要拓展到a[0:2,1:3]这个操作就是对于第一维(行)0:2选取前两行,对于第二维(列)1:3选取第1,2列,就相当于只选取了前两行的1,2列这四个元素
飞桨“PaddlePaddle”实践学习笔记_第5张图片  
结合运行结果理解一下

对于迭代来说二维数组会有两层for循环,这时我们可以用数组的flat方法使其扁平化,

for i in d:
  for ii in i:
    print(ii)

#以上操作等同于扁平化在一维操作

for i in d.flat:
  print(i)

注意扁平化之后是一个迭代器,而不是直接的一维数组,所以不能够直接进行数组的操作

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