深度学习【向量化(array)】

为什么要向量化

在深度学习安全领域、深度学习练习中,你经常发现在训练大量数据时,深度学习算法表现才更加优越,所以你的代码运行的非常快至关重要,否则,你将要等待非常长的时间去得到结果。所以在深度学习领域向量化是一个关键技巧。

正常虽然可以通过for循环完成一些基本的操作,但是这样会导致运行效率大打折扣,这时候运用矩阵运算,引入Numpy,可以一定程度上提高代码的运行效率。

要记住,经验法则是当你编写新的网络时,或者你做的只是回归,那么一定要尽量避免for循环,能不用就不用。如果你可以使用内置函数,或者找出其他方法去计算循环,通常会比直接用for循环更快。

what is Numpy?

1.一个开源的Python科学计算库
2.使用Numpy可以方便的使用数组,矩阵进行计算
3.包含线性代数,傅里叶变换,随机数生成等大量函数

Numpy 的优点

代码更简洁:Numpy直接以数组,矩阵为粒度(一个单元)计算并且支持大量的数学函数,而python需要用for循环从底层实现
性能更高效:Numpy的数组存储效率和输入输出计算性能,比python使用list或者嵌套list好很多
        注:Numpy的数据存储和python原生的list是不一样的
        注:Numpy的大部分代码都是c语言实现的,这是Numpy比纯python代码高效的原因

这里主要介绍一下array

array一维数组

一般来说,array基本是所有程序语言都有的一种基础线性结构,元素以特定的顺序存储在一段连续的内存中。Python的array只能存储数值和字符。

要使用array之前需要先引入,操作如下

    #从numpy中引用array
    import numpy as np
    np.array()

创建方式如下

    # 需要提供一个类型代码字符来指示存储何种元素
    # 以及一个可迭代对象来填充元素
    array.array(typecode[, initializer])
    
    # array所有的类型代码字符
    print(array.typecodes)
    bBuhHiIlLqQfd
    
    # 创建一个存储整型的array
    arr = array('i', [1,2,3,4,5,6])

类型码(typecode)有以下几种

array二维数组

使用python的list和嵌套list创建一维的array和二维的array

创建方式如下

# 创建一个一维的数组,也就是python的单元素list
x=np.array([1,2,3,4,5,6,7,8])
# 创建一个二维的数组,也就是python的嵌套list
X=np.array([[1,2,3,4],[5,6,7,8]])

关于array的便捷函数

<1>.使用arange创建数字序列

arange([起始值(取得到)],[终止值(取不到)],[步长],dtype=None)

print(np.arange(10))#创建一个0-10的一维数组(取不到10)
print(np.arange(2,10,2))#创建一个2-10,步长为2的一维数组(取不到10)

运行结果

<2>使用ones创建单位数组

np.ones(shape,dtype=None,order=‘C’)
shape:int or tuple of ints Shape of the new array . eg:(2,3) or 2
dtype:数据类型,默认的是自己从输入的数据自动获得
order:有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序

print(np.ones(10))#创建一个一行十列的单位数组
print(np.ones((2,3)))#创建一个二行三列的单位数组

运行结果

<3>使用ones_like创建与某个数组形状相同的单位数组

print(np.ones_like(x))#创建一个和x相同形状的单位数组
print(np.ones_like(X))#创建一个和X相同形状的单位数组
print(np.ones_like([2,3]))#创建一个和[2,3]数组形状相同的单位数组
print(np.ones_like([[1,2,3],[4,5,6]]))#创建一个和[[1,2,3],[4,5,6]]数组形状相同的单位数组

运行结果

<4>使用zeros创建全是0的数组

print(np.zeros(3))#创建一个一行三列的零数组
print(np.zeros((2,4)))#创建一个二行四列的零数组

运行结果

<5>使用full创建指定值的数组

print(np.full(4,9))#创建一个一行四列,元素为9的数组
print(np.full((2,3),9))#创建一个二行三列,元素为9的数组

运行结果

<6>使用random模块生成随机数的数组

print(np.random.randn())#生成一个随机数
print(np.random.randn(3))#随机生成一个一行三列的数组,这也生成的秩为1的数组,既不是行向量也不是列向量。尽量不用这种数据结构
print(np.random.randn(3,1))

print(np.random.randn(2,3))#随机生成一个二行三列的数组
print(np.random.randn(2,3,4))#随机生成一个三维的数组,有两块三行四列的数组组成

运行结果

np.random.rand():

该函数旨在输出0~1的正态分布随机数

其参数可以是1个,也可以是多个。

函数内部可以不写参数,默认为1,输出1个随机数。

np.random.rand(d0,d1,d2……dn) 
注:使用方法与np.random.randn()函数相同 
作用: 
通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。 

还有许多函数,本文无法完全涉及,用到再查即可。

相关推荐

  1. elasticsearch 关于量化检索

    2024-04-12 21:44:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 21:44:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 21:44:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 21:44:03       87 阅读
  4. Python语言-面向对象

    2024-04-12 21:44:03       96 阅读

热门阅读

  1. Spring IoC面试题解析

    2024-04-12 21:44:03       39 阅读
  2. hibernate缓存

    2024-04-12 21:44:03       44 阅读
  3. python-pytorch实现lstm模型预测文本输出0.1.00

    2024-04-12 21:44:03       27 阅读
  4. 前端响应式布局方式及其优缺点大全

    2024-04-12 21:44:03       39 阅读
  5. 前端面试题(1)

    2024-04-12 21:44:03       30 阅读
  6. 基础知识点全覆盖(1)

    2024-04-12 21:44:03       33 阅读
  7. Go导入私有仓库

    2024-04-12 21:44:03       39 阅读
  8. 蓝桥集训之修理牛棚

    2024-04-12 21:44:03       43 阅读
  9. XGB-25:Callback函数

    2024-04-12 21:44:03       40 阅读
  10. Linux学习 - 又双叒叕一个软件安装方法

    2024-04-12 21:44:03       37 阅读
  11. vue3获取当前路由为什么一直是 / ?

    2024-04-12 21:44:03       36 阅读
  12. docker命令

    2024-04-12 21:44:03       40 阅读