手把手教你用Python的NumPy包处理数据

本文介绍了如何开始使用NumPy,包括导入模块、验证版本、理解数组概念以及如何进行数学运算。NumPy使得在Python中进行数组操作更加高效,支持多维数组,并提供了丰富的数学功能。文章还涵盖了数组的属性、索引和多维数组的创建,强调了其在机器学习和图像处理(如OpenCV)中的应用。
摘要由CSDN通过智能技术生成

导读: 本文让你快速了解一下如何开始使用NumPy。一旦你熟悉了NumPy,就会发现Python世界中的大多数科学计算都是围绕NumPy构建的。因此花在NumPy上的学习时间最终对你是有益的。

如果你已经安装了Anaconda,那么就假设你已经在虚拟环境中安装了NumPy。如果你使用过Python的标准发行版或任何其他发行版,你可以访问

http://www.numpy.org

并按照所提供的安装说明进行操作。

01 导入NumPy

一旦启动了一个新的IPython或者Jupyter会话,就可以导入Numpy模块并按照以下步骤来验证版本:

import numpy  
numpy.__version__  

输出结果:

1.15.4  

提示:记得在Jupyter Notebook中,键入命令后,你可以按下Ctrl+Enter,以执行一个单元格。或者,按下Shift+Enter以执行单元格,并自动插入或者选择该单元格下面的单元格。依次单击Help | Keyboard Shortcut以检查所有的键盘快捷键,或者依次单击Help | User Interface Tour以进行快速浏览。

此处讨论的部分包,建议使用NumPy 1.8版本或后续版本。按照惯例,你会发现在科学Python领域中,大多数人导入NumPy都会使用np作为别名:

import numpy as np  
np.__version__  

输出结果:

1.15.4  

02 理解NumPy数组

Python是一种弱类型的语言。这就意味着,**你无论何时创建一个新变量,都不必指定数据类型。**例如,下面的内容将自动表示为一个整数:

a = 5  

输入下面内容以再次确认:

type(a)  

输出结果:

int  

注意:因为标准Python实现是用C编写的,所以每个Python对象本质上是一个伪C结构。这对于Python中的整数也是如此,实际上它是指向复合C结构的指针,包含的不仅仅是原始整数值。因此,用于表示Python整数的默认C数据类型将依赖于你的系统架构(即系统是32位还是64位平台)。

更进一步,我们使用list()命令可以创建一个整数列表,这是Python中的标准多元素容器。range (x)函数将创建从0到x–1的所有整数。要输出变量,你可以使用print函数,也可以直接输入变量名字并按Enter:

int_list = list(range(10))  
int_list  

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

类似地,我们通过让Python遍历整数列表int_list中的所有元素,并对每个元素应用str()函数(该函数将一个数转换成一个字符串),来创建一个字符串列表:

str_list = [str(i) for i in int_list]  
str_list  

输出结果:

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']  

可是,用列表进行数学运算并不是很灵活。例如,我们想要将int_list中的每个元素都乘以一个因子2。执行以下操作可能是一种简单的方法—看看输出结果是怎样的:

int_list * 2  

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  

Python创建了一个列表,其内容是int_list的所有元素生成了两次,这并不是我们想要的!

这就是NumPy的用武之地。NumPy是专为简化Python中的数组运算而设计的。我们可以快速将整数列表转换为一个NumPy数组:

import numpy as np  
int_arr = np.array(int_list)  
int_arr  

输出结果:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])  

让我们看看试着将数组中的每个元素相乘会怎么样:

int_arr * 2  

输出结果:

array([ 0  2  4  6  8 10 12 14 16 18])  

这次我们做对了!加法、减法、除法以及很多其他运算也是同样的。

而且,每个NumPy数组都具有以下属性:

  • ndim: 维数。

  • shape: 每一维的大小。

  • size: 数组中元素的总数。

  • dtype: 数组的数据类型(例如int、float、string等)。

让我们来看看整数数组的上述属性:

print("int_arr ndim: ", int_arr.ndim)  
print("int_arr shape: ", int_arr.shape)  
print("int_arr size: ", int_arr.size)  
print("int_arr dtype: ", int_arr.dtype)  

输出结果:

int_arr ndim:  1  
int_arr shape:  (10,)  
int_arr size:  10  
int_arr dtype:  int64  

从这些输出中,我们可以看到我们的数组只包含一维,其包含10个元素且所有元素都是64位的整数。当然,如果你在32位机器上执行这段代码,你可能会得到dtype:int 32。

03 通过索引访问单个数组元素

如果你之前使用过Python的标准列表索引,那么你就不会发现NumPy中的索引有很多问题。在一维数组中,通过在方括号中指定所需的索引,可以访问第i个值(从0开始计算),与Python列表一样:

int_arr  

输出结果:

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])  
int_arr[0]  

输出结果:

0
int_arr[3]  

输出结果:

3

要从数组的末尾建立索引,可以使用负索引号:

int_arr[-1]  

输出结果:

9
int_arr[-2]  

输出结果:

8

切割数组还有一些其他很酷的技巧,如下所示:

int_arr[2:5] #from index 2 up to index 5 - 1  

输出结果:

array([2, 3, 4])  
int_arr[:5] #from the beginning up to index 5 - 1  

输出结果:

array([0, 1, 2, 3, 4])  
int_arr[5:] #from index 5 up to the end of the array  

输出结果:

array([5, 6, 7, 8, 9])  
int_arr[::2] #every other element  

输出结果:

array([0, 2, 4, 6, 8])  
int_arr[::-1] #the entire array in reverse order  

输出结果:

array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])  

建议你自己尝试使用这些数组!

提示:NumPy中切割数组的一般形式与标准Python列表中的相同。使用x [start: stop: step]访问数组x中的一个片段。如果没有指定任何一个值,那么默认值为start=0、stop=size of dimension、step=1。

04 创建多维数组

数组不必局限于列表。实际上,数组可以有任意维数。在机器学习中,通常我们至少要处理二维数组,列索引表示特定的特征值,行包含实际的特征值。

使用NumPy可以轻松地从头开始创建多维数组。假设我们想要创建一个3行5列的数组,所有的元素都初始化为0。如果我们不指定数据类型,NumPy将默认使用float类型:

arr_2d = np.zeros((3, 5))  
arr_2d  

输出结果:

array([[0., 0., 0., 0., 0.],  
       [0., 0., 0., 0., 0.],  
       [0., 0., 0., 0., 0.]])  

使用OpenCV时你可能就知道:这可以解释为所有像素设置为0(黑色)的一个3×5的灰度图像。例如,如果你想要创建具有3个颜色通道(R、G和B)2×4像素的一个小图像,但是所有像素都设置为白色,我们将使用NumPy创建一个3×2×4的三维数组:

arr_float_3d = np.ones((3, 2, 4))  
arr_float_3d  

输出结果:

array([[[1., 1., 1., 1.],  
        [1., 1., 1., 1.]],  
  
       [[1., 1., 1., 1.],  
        [1., 1., 1., 1.]],  
  
       [[1., 1., 1., 1.],  
        [1., 1., 1., 1.]]])  

这里,第一维定义颜色通道(OpenCV中的蓝色、绿色和红色)。因此,如果这是真实的图像数据,我们可以通过切割数组轻松地获得第一个通道中的颜色信息:

arr_float_3d[0, :, :]  

输出结果:

array([[1., 1., 1., 1.],  
       [1., 1., 1., 1.]])  

在OpenCV中,图像要么是值在0到1之间的32位浮点数组,要么是值在0到255之间的8位整数数组。因此,使用8位整数,通过指定NumPy的dtype属性并将数组中的所有1乘以255,我们还可以创建一个2×4像素、全为白色的RGB图像:

arr_uint_3d = np.ones((3, 2, 4), dtype=np.uint8) * 255  
arr_uint_3d  

输出结果:

array([[[255, 255, 255, 255],  
        [255, 255, 255, 255]],  
  
       [[255, 255, 255, 255],  
        [255, 255, 255, 255]],  
  
       [[255, 255, 255, 255],  
        [255, 255, 255, 255]]], dtype=uint8)

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

点击免费领取《CSDN大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值