paddlepaddle学习笔记2--numpy的应用

paddlepaddle学习笔记2

前言

从之前的房价预测的实际演练中,我们发现在完成深度学习模型的过程中,第三方库numpy是极其重要的。所以在此处记录一下numpy的学习过程

ndarray数组的矢量性质

  • ndarray数组中所有元素的数据类型相同、数据地址连续,批量操作数组元素时速度更快。而list列表中元素的数据类型可能不同,需要通过寻址方式找到下一个元素。
  • ndarray数组支持广播机制,矩阵运算时不需要写for循环。
  • NumPy底层使用C语言编写,内置并行计算功能,运行速度高于Python代码。
# Python原生的list
# 假设有两个list
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]

# 完成如下计算
# 对a的每个元素 + 1
# a = a + 1 不能这么写,会报错
# a[:] = a[:] + 1 也不能这么写,也会报错
for i in range(5):
    a[i] = a[i] + 1

如果使用ndarry实现同样的效果:

import numpy as np
a = np.array([1,2,3,4,5])
a+=1
输出结果为:array([2,3,4,5,6])

以及假如要实现两个list的相加:

# 计算 a和b中对应位置元素的和,是否可以这么写?
a = [1, 2, 3, 4, 5]
b = [2, 3, 4, 5, 6]
# 使用for循环,完成两个list对应位置元素相加
c = []
for i in range(5):
    c.append(a[i] + b[i])

不难看出对于list中的任何元素都要进行for循环才能进行操作但是ndarry就可以直接利用矢量性质一步到位

# 使用numpy中的ndarray完成两个ndarray相加
import numpy as np
a = np.array([1, 2, 3, 4, 5])
b = np.array([2, 3, 4, 5, 6])
c = a + b 

ndarry数组的广播机制

以下代码为例,不难看出,ndarry在进行一维和二维数组的相加的时候,会将一维数组广播到二维数组按位相加

# 自动广播机制,1维数组和2维数组相加

# 二维数组维度 2x5
# array([[ 1,  2,  3,  4,  5],
#         [ 6,  7,  8,  9, 10]])
d = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
# c是一维数组,维度5
# array([ 4,  6,  8, 10, 12])
c = np.array([ 4,  6,  8, 10, 12])
e = d + c
e

array([[ 5, 8, 11, 14, 17], [10, 13, 16, 19, 22]])

创建ndarry数组

创建ndarray数组最简单的方式就是使用array函数,它接受一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的NumPy数组。下面通过实例体会下arrayarangezerosones四个主要函数的用法。

  • array:创建嵌套序列(比如由一组等长列表组成的列表),并转换为一个多维数组。
# 导入numpy
import numpy as np

# 从list创建array 
a = [1,2,3,4,5,6]  # 创建简单的列表
b = np.array(a)    # 将列表转换为数组
b
array([1, 2, 3, 4, 5, 6])
  • arange:创建元素从0到10依次递增2的数组。np.arange(开始,结束,步长)
# 通过np.arange创建
# 通过指定start, stop (不包括stop),interval来产生一个1维的ndarray
a = np.arange(0, 10, 2)
a
array([0, 2, 4, 6, 8])
  • zeros:创建指定长度或者形状的全0数组。np.zeros([一维array的数量,一个一维array中有多少个元素])
# 创建全0的ndarray
a = np.zeros([3,4])
a
array([[0., 0., 0.,0.], [0., 0., 0.,0.], [0., 0., 0.,0.]])
  • ones:创建指定长度或者形状的全1数组。与上边同理,只是其中的单个元素0换为1
# 创建全1的ndarray
a = np.ones([3,3])
a
array([[1., 1., 1.], [1., 1., 1.], [1., 1., 1.]])

ndarry数组的属性

ndarray的属性包括shapedtypesizendim等,通过如下代码可以查看ndarray数组的属性。

  • shape:数组的形状 ndarray.shape,1维数组(N, ),二维数组(M, N),三维数组(M, N, K)。
  • dtype:数组的数据类型。(数据类型一般有:int\float64\double等)
  • size:数组中包含的元素个数 ndarray.size,其大小等于各个维度的长度的乘积。(所有的元素的数量
  • ndim:数组的维度大小,ndarray.ndim, 其大小等于ndarray.shape所包含元素的个数。
a = np.ones([3, 3])
print('a, dtype: {}, shape: {}, size: {}, ndim: {}'.format(a.dtype, a.shape, a.size, a.ndim))

运行结果:
a, dtype: float64, shape: (3, 3), size: 9, ndim: 2

ndarray数组的数据类型和形状

a.astype(np.int64) 强制类型转换

a.reshape([m,n]) 对元素切片为n行,每行有m个元素

#数据类型强制转换
a = np.ones([3,4])
b = a.astype(np.int64)
print('b, dtype: {}, shape: {}'.format(b.dtype,b.shape))

#改变ndarray形状
c = a.reshape([2,6])
print('c, dtype: {}, shape: {}'.format(c.dtype,c.shape))

运行结果:
b, dtype: int64, shape: (3, 4)
c, dtype: float64, shape: (2, 6)

ndarray数组的基本运算

标量和ndarray数组之间的运算

标量和ndarray数组之间的运算主要包括除法、乘法、加法和减法运算,具体代码如下所示。

# 标量除以数组,用标量除以数组的每一个元素
arr = np.array([[1., 2., 3.], [4., 5., 6.]])
1. / arr
运行结果:
array([[1. , 0.5 , 0.33333333], [0.25 , 0.2 , 0.1666
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值