【Python深度学习前传】用NumPy创建多维数组

Python之所以能成为深度学习领域最受宠的编程语言,其中Python三剑客的NumPy、Pandas和Matplotlib功不可没。这3个库分别用于科学计算、数据分析和数据可视化。本系列文章作为深度学习的前传,将开始介绍这3个函数库的核心使用方法,首先介绍一下NumPy。

可能有很多读者会说,NumPy有什么特别的呢?现在用于科学计算的库很多。为什么会提到NumPy呢?因为NumPy 是一个运行速度非常快的科学计算库,这里的关键字不仅是“科学计算”,还有一个“快”。因为NumPy只是用Python作了个外壳,底层逻辑是使用C语言实现的,所以NumPy在运行速度上要远比纯Python代码实现的科学计算库快得多。使用NumPy可以体验到在原生Python代码上从未体验过的运行速度。

那么NumPy到底有什么功能呢?其实NumPy的功能非常多,主要用于数组计算。NumPy可以让你在Python语言中使用向量和数学矩阵。NumPy 是 Python 语言在科学计算领域取得成功的关键之一,如果你想通过 Python语言学习数据科学、人工智能(包括深度学习、语言处理等分支),就必须学习 NumPy。

1.  NumPy开发环境搭建

NumPy是第三方程序库,所以在使用NumPy之前必须安装NumPy。如果读者使用的Anaconda Python开发环境,那么NumPy已经集成到Anaconda环境中了,不需要再安装。如果读者使用的是官方的Python开发环境,可以使用如下的命令安装NumPy。

pip install numpy

如果读者要了解NumPy更详细的情况,请访问官方网站,网址如下:

http://www.numpy.org

安装完NumPy后,可以测试一下NumPy是否安装成功。读者可以进入Python的REPL环境,然后使用下面的语句导入numpy模块,如果不出错,就说明NumPy已经安装成功了。

import numpy

2. 第一个NumPy程序

本节来编写第一个NumPy程序,来体验一下NumPy的强大。在编写程序之前,需要先了解一下这个程序要做什么。

在这个程序中只涉及到numpy模块中的一个arange函数,该函数可以传入一个整数类型的参数n,函数返回值看着像一个列表,其实返回值类型是numpy.ndarray。这是NumPy中特有的数组类型。如果传入arange函数的参数值是n,那么arange函数会返回0到n-1的ndarray类型的数组。而且这个数组还支持很多Python语言的基础运算,如加法(+)、减法(-)、次方(**)等。例如,arange(5) ** 2的结果是[ 0  1  4  9  16],可以看到,对一个ndarray类型的数组使用次方运算,实际上是对每一个数组元素进行次方运算。

下面的例子使用arange函数生成了多个ndarray类型的数组,并对数组进行加法和次方运算。

# 导入numpy模块的arange函数
from numpy import arange
def sum(n):
    # 对ndarray类型的数组进行2次方运算
a = arange(n) ** 2  
    # 对ndarray类型的数组进行4次方运算
b = arange(n) ** 4  
# 将两个ndarray类型的数组相加(每个数组元素相加)
    c = a + b
return c
# 输出0到4的数组,运行结果:[0 1 2 3 4]
print(arange(5))
# 运行结果:[ 0  1  4  9 16]
print(arange(5) ** 2)    
# 运行结果:[  0   1  16  81 256]
print(arange(5) ** 4)    
# 运行结果:[  0   2  20  90 272]
print(sum(5))
 

程序运行结果如图1所示。

图1 数组运算

3. 创建多维数组

numpy模块的array函数可以生成多维数组。例如,如果要生成一个二维数组,需要向array函数传一个列表类型的参数,每一个列表元素是一维的ndarray类型数组,作为二维数组的行。另外,通过ndarray类的shape属性可以获得数组每一维的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是维度,从0开始。

下面的例子使用array函数和arange函数生成了多个二维数组,并输出了这些二维数组以及相关的属性值。

from numpy import *
# 创建一个一维的数组
a = arange(5)
# 输出一维数组,运行结果:[0 1 2 3 4]
print(a)
# 输出数组每一维度的元素个数,运行结果:(5,)
print(a.shape)
# 输出第一维的元素个数,运行结果:5
print(a.shape[0])
# 创建一个3*3的二维数组
m1 = array([arange(3),arange(3),arange(3)])
print(m1)
# 创建一个2*3的二维数组
m2 = array([arange(3),arange(3)])
print(m2)
# 创建一个3*3的混合类型数组(每个数组元素的类型可能不一样)
m3 = array([["a","b",4],[1,2,3],[5.3,5,3]])
print(m3)
# 输出m2数组每一维度元素的个数,运行结果:(2, 3)
print(m2.shape)
# 运行结果:m2是2维数组
print("{}是{}维数组".format("m2", len(m2.shape)))
# 输出m2的第1维的元素个数,运行结果:2
print(m2.shape[0])
# 输出m2的第2维的元素个数,运行结果:3
print(m2.shape[1])

程序运行结果如图2所示。

图2  创建二维数组

-

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法,在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较,从而确定目标数是在中间数的左边还是右边,将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令: 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体,就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛,这门课会介绍许多方法去利用离散点最大化地逼近这个函数,甚至它的导数、积分,甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目: 解题思路: 第一步: 第二步: 第三步: 总代码: 题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验,睡觉过程中突然意识清醒,身体却动弹不了。这时候感觉非常恐怖,希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况,一年有一百多次,那时候很害怕晚上到来,睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别(move-only type,只移型别还有std::mutex等)。 结合一下工厂模式,看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在,但代码中需要用到它,通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能,通常需要完成两步操作:一.是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度(?) 不管两个高积木之间的的积木是怎样乱七八糟的高度,最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的,用的是MFC VS2019. 详见:http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936,然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一:区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N,表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源,一般分为两类: 系统内置资源:Android SDK中所提供的已经定义好的资源,用户可以直接拿来使用。 用户自定义资源:用户自己定义或引入的,只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python,NLP,知识图谱,机器学习,深度学习人工智能:知识图谱实战前言一、实体建模工具Protegepython,NLP,知识图谱,机器学习,深度学习 人工智能:知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…