【深度学习】0-0 NumPy基础知识

NumPy的主要特点
ndarray,快速,节省空间的多维数组,提供数组化的算术运算和高级的广播功能

导入NumPy
NumPy是外部库。首先要导人NumPy库。
import numpy as np

NumPy数组
生成NumPy数组,使用np.array(),接收Python列表作为参数

通过arange创建数组:下例中创建一个0~1间隔为0.1的行向量,从0开始,不包括1

>>>np.arange(0,10.1)
array([0.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])

关于arange详细可参考这个https://blog.csdn.net/qq_41800366/article/details/86589680

利用random模块生成ndarray
在深度学习中,我们经常需要对一些变量进行初始化,适当的初始化能提高模型的性能。通常用随机数生成模块random来生成,
random模块又分为多种函数:
random生成0到1之间的随机数;
uniform生成均匀分布随机数;
randn生成标准正态的随机数;
normal生成正态分布;
shuffle随机打乱顺序;
seed设置随机数种子。
例如:

import numpy as np
nd5 = np.random.random([3,3])
print(nd5)

结果如下

[[ 0.88900951 0.47818541 0.91813526]
 [ 0.48329167 0.63730656 0.14301479]
[ 0.9843789  0.99257093 0.24003961]]

创建特定形状的多维数组
数据初始化时,有时需要生成一些特殊矩阵,如0或1的数组或矩阵,这时我们可以利用np.zeros、np.ones、np.diag来实现,下面我们通过几个示例来说明。

#生成全是03x3矩阵
nd6 = np.zeros([3,3])
#生成全是13x3矩阵
nd7 = np.ones([3,3])
#生成3阶的单位矩阵
nd8= np.eye(3)
#生成3阶对角矩阵
print (np.diag([1, 2, 3]))

存取元素

>>>a = np.arange(10)
>>>print (a,'\n')
[0 1 2 3 4 5 6 7 8 9]
#简单的的切片课作,0~4号元素,不包括5
>>>print('a[:5]=’,a[:5],‘\n')
a[:5]= [0 1 2 3 4]
#数组从后往前取
>>>print('a[:-1]=',a[:-1],’\n')
a[:-1]= [0 1 2 3 4 5 6 7 8]
#加入步长参数
>>>print('a[1:-1:2]=’,a[1:-1:2],’\n')
a[1:-1:2]= [1 3 5 7]
# 省略范围的开始下标和结束下标,步长为-1,整个数组头尾颠倒**
>>>print('a[::-1]=’,a[::-1],'\n')
a[::-1]= [9 8 7 6 5 4 3 2 1 0]
# 步长为负数时,开始下标必须大于结束下标,下面步长为-2
>>>print( ‘a[5:1:-2]=,a[5:1:-2])
a[5:1:-2]= [5 3]

矩阵操作
深度学习中经常涉及多维数组或矩阵的运算,正好NumPy模块提供了许多相关的计算方法,下面介绍一些常用的方法。

nd14=np.arange(9).reshape([3,3])
#矩阵转置
np.transpose(nd14)
#矩阵乘法运算
a=np.arange(12).reshape([3,4])
b=np.arange(8).reshape([4,2])
a.dot(b)
#求矩阵的迹
a.trace()

NumPy算术运算

>>>x= np.array([1.02.0, 3.0])
>>>y = np.array([2.04.06.0])
>>>x+y #对应元素的加法
array([ 3., 6., 9. ])
>>>x-y
array([ -1., -2.-3.])
>>>x*y #element-wise product
array([ 2.. 8., 18.])
>>>x/y
array([ 0.5, 0.50.5])

数组x和数组y的元素个数是相同的,如果元亲个数不同,程序就会报错
element-wise product 表示“对应元素的乘法”
NumPy数组不仅可以进行element-wise运算,也可以和单一的数值(标量)组合起来进行运算
这个功能也被称为广播

>>>x = np.array([1.0,2.0,3.0])
>>>x/2.0
array([ 0.5,1.1.5])

N维数组
NumPy可以生成多维数组,比如,可以生成如下的二维数组(矩阵)。

>>> A = np.array([[12][3,4]])

矩阵A的形状可以通过shape查看
矩阵元素的数据类型可以通过dtype查看

>>>A.shape
(22)
>>>A.dtype
dtype('int64')

矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行。
数学上将一维数组称为向量
将二维数组称为矩阵
可以将一般化之后的向量或矩阵等称为张量

基本上将二维数组称为“矩阵”,将三维组及三维以上的数组称为“张量”或“多维数组

广播
NumPy中,形状不同的数组之间也可以进行运算。
例如:将标量10被扩展(复制)成了2x2的形状,然后再与矩阵A进行乘法运算,这个巧妙的功能称为广播
因为NumPy有广播功能,所以不同形状的数组之间也可以进行运算。

访问元素
元素的索引从0开始。对各个元素的访问可按如下方式进行。

>>> X = np.array([[5155][14,19][04]])
>>>X[0]  #第0>>>X[0][1]  #(0,1)的元紫

NumPy还可以使用数组访问各个元素。

>>> X=X.flatten()  #将X转换为一维数组
>>> print(X)
[51 55 14 19 0 4]
>>> X[np,array([024])]   # 获取索引为024的元素
array([51140])

运用这个标记法,可以获取满足一定条件的元素。例如,要从x中抽出大于15的元素,可以写成如下形式。

>>>X>15
array([ True, True, False, True, False, False], dtype=bool)
>>>X[X>15]
array(15155,191)

补充知识
Theano对于解决大量数据的问题,使用Theano可能获得与手工用C实现差不多的性能。
相关知识扩展:https://zhuanlan.zhihu.com/p/24218567

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值