Python NumPy (上)

自学python之路

大数据实验室第6次学习打卡

一、numpy简介

1.什么是numpy

NumPy 是用于处理数组的 python 库。
它还拥有在线性代数、傅立叶变换和矩阵领域中工作的函数。
NumPy 由 Travis Oliphant 于 2005 年创建。它是一个开源项目,您可以自由使用它。
NumPy 指的是数值 Python(Numerical Python)。

2.为何使用numpy

在python中,有满足数组功能的列表,但是处理起来很慢。
numpy旨在提供一个比传统python列表快50倍的数组对象。
numpy中的数组对象称为nddarray,它提供了许多支持函数,使得利用ndarray非常容易。
数组在数据科学中非常常用,因为速度和资源非常重要。

3.为什么numpy比列表快

与列表不同,numpy数组存储在内存中的一个连续位置,因此进程可以非常有效地访问和操纵它们。
这种行为在计算机科学中称为引用的局部性。
这是 NumPy 比列表更快的主要原因。它还经过了优化,可与最新的 CPU 体系结构一同使用。

4.NumPy 用哪种语言编写?

NumPy 是一个 Python 库,部分用 Python 编写,但是大多数需要快速计算的部分都是用 C 或 C ++ 编写的。

二、numpy入门

1.安装 NumPy

如果已经在系统上安装了 Python 和 PIP,那么安装 NumPy 非常容易。
请使用这条命令安装它:
C:\Users\Your Name>pip install numpy
如果此命令失败,使用已经安装了 NumPy 的 python 发行版,例如 Anaconda、Spyder 等。

导入 NumPy
安装 NumPy 后,通过添加 import 关键字将其导入您的应用程序:
import numpy
现在,Numpy 已导入并可以使用。

实例
在这里插入图片描述
检查 NumPy 版本
版本字符串存储在 version 属性中。
实例
在这里插入图片描述

三、数组创建

创建 NumPy ndarray 对象

NumPy 用于处理数组。 NumPy 中的数组对象称为 ndarray。
我们可以使用 array() 函数创建一个 NumPy ndarray 对象。
实例
在这里插入图片描述

type(): 这个内置的 Python 函数告诉我们传递给它的对象的类型。像上面的代码一样,它表明 arr 是 numpy.ndarray 类型。
要创建 ndarray,我们可以将列表、元组或任何类似数组的对象传递给 array() 方法,然后它将被转换为 ndarray:
实例
使用元组创建 NumPy 数组:
在这里插入图片描述
数组中的维
数组中的维是数组深度(嵌套数组)的一个级别。
嵌套数组:指的是将数组作为元素的数组。

0-D 数组
0-D 数组,或标量(Scalars),是数组中的元素。数组中的每个值都是一个 0-D 数组。
实例
用值 61 创建 0-D 数组:
在这里插入图片描述
1-D 数组
其元素为 0-D 数组的数组,称为一维或 1-D 数组。
这是最常见和基础的数组。
实例
创建包含值 1、2、3、4、5、6 的 1-D 数组:
在这里插入图片描述
2-D 数组
其元素为 1-D 数组的数组,称为 2-D 数组。
它们通常用于表示矩阵或二阶张量。
NumPy 有一个专门用于矩阵运算的完整子模块 numpy.mat。
实例
创建包含值 1、2、3 和 4、5、6 两个数组的 2-D 数组:
在这里插入图片描述
3-D 数组
其元素为 2-D 数组的数组,称为 3-D 数组。
实例
用两个 2-D 数组创建一个 3-D 数组,这两个数组均包含值1、2、3 和 4、5、6 的两个数组:
在这里插入图片描述
检查维数
NumPy 数组提供了 ndim 属性,该属性返回一个整数,该整数会告诉我们数组有多少维。
实例
检查数组有多少维:
在这里插入图片描述
更高维的数组
数组可以拥有任意数量的维。
在创建数组时,可以使用 ndmin 参数定义维数。
实例
创建一个有 5 个维度的数组,并验证它拥有 5 个维度:
在这里插入图片描述

四、数组索引

访问数组元素
数组索引等同于访问数组元素。
您可以通过引用其索引号来访问数组元素。
NumPy 数组中的索引以 0 开头,这意味着第一个元素的索引为 0,第二个元素的索引为 1,以此类推。

负索引
使用负索引从尾开始访问数组。

五、数组裁切

裁切数组
python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。
我们像这样传递切片而不是索引:[start:end]。
我们还可以定义步长,如下所示:[start:end:step]。
如果我们不传递 start,则将其视为 0。
如果我们不传递 end,则视为该维度内数组的长度。
如果我们不传递 step,则视为 1。
实例
在这里插入图片描述

六、数据类型

Python 中的数据类型
默认情况下,Python 拥有以下数据类型:
strings - 用于表示文本数据,文本用引号引起来。例如 “ABCD”。
integer - 用于表示整数。例如 -1, -2, -3。
float - 用于表示实数。例如 1.2, 42.42。
boolean - 用于表示 True 或 False。
complex - 用于表示复平面中的数字。例如 1.0 + 2.0j,1.5 + 2.5j。

NumPy 中的数据类型
NumPy 有一些额外的数据类型,并通过一个字符引用数据类型,例如 i 代表整数,u 代表无符号整数等。
以下是 NumPy 中所有数据类型的列表以及用于表示它们的字符。
i - 整数
b - 布尔
u - 无符号整数
f - 浮点
c - 复合浮点数
m - timedelta
M - datetime
O - 对象
S - 字符串
U - unicode 字符串
V - 固定的其他类型的内存块 ( void )

检查数组的数据类型
NumPy 数组对象有一个名为 dtype 的属性,该属性返回数组的数据类型:
实例
获取数组对象的数据类型:
在这里插入图片描述
用已定义的数据类型创建数组
我们使用 array() 函数来创建数组,该函数可以使用可选参数:dtype,它允许我们定义数组元素的预期数据类型:
实例
创建数据类型为 4 字节整数的数组:
在这里插入图片描述
假如值无法转换会怎样?
如果给出了不能强制转换元素的类型,则 NumPy 将引发 ValueError。
ValueError:在 Python 中,如果传递给函数的参数的类型是非预期或错误的,则会引发 ValueError。

转换已有数组的数据类型
更改现有数组的数据类型的最佳方法,是使用 astype() 方法复制该数组。
astype() 函数创建数组的副本,并允许您将数据类型指定为参数。
数据类型可以使用字符串指定,例如 ‘f’ 表示浮点数,‘i’ 表示整数等。或者您也可以直接使用数据类型,例如 float 表示浮点数,int 表示整数。
实例
通过使用 ‘i’ 作为参数值,将数据类型从浮点数更改为整数:
在这里插入图片描述

七、副本/视图

副本和视图之间的区别
副本和数组视图之间的主要区别在于副本是一个新数组,而这个视图只是原始数组的视图。
副本拥有数据,对副本所做的任何更改都不会影响原始数组,对原始数组所做的任何更改也不会影响副本。
视图不拥有数据,对视图所做的任何更改都会影响原始数组,而对原始数组所做的任何更改都会影响视图。

副本
实例:
在这里插入图片描述
视图
实例
创建视图,更改原始数组,然后显示两个数组:
在这里插入图片描述

检查数组是否拥有数据
如上所述,副本拥有数据,而视图不拥有数据,但是我们如何检查呢?
每个 NumPy 数组都有一个属性 base,如果该数组拥有数据,则这个 base 属性返回 None。
否则,base 属性将引用原始对象。
实例
打印 base 属性的值以检查数组是否拥有自己的数据:
在这里插入图片描述

八、数组形状

数组的形状: 数组的形状是每个维中元素的数量。

获取数组的形状
NumPy 数组有一个名为 shape 的属性,该属性返回一个元组,每个索引具有相应元素的数量。
实例
打印 2-D 数组的形状(该数组有 2 个维,每个维有 4 个元素):
在这里插入图片描述
实例
利用 ndmin 使用值 1,2,3,4 的向量创建有 5 个维度的数组,并验证最后一个维度的值为 4:
在这里插入图片描述

九、数组重塑

含义: 重塑意味着更改数组的形状。通过重塑,我们可以添加或删除维度或更改每个维度中的元素数量。

从 1-D 重塑为 2-D
实例
将以下具有 12 个元素的 1-D 数组转换为 2-D 数组。
最外面的维度将有 4 个数组,每个数组包含 3 个元素:
在这里插入图片描述
从 1-D 重塑为 3-D
在这里插入图片描述
返回副本还是视图?
实例
检查返回的数组是副本还是视图(返回原始数组,因此它是一个视图):
在这里插入图片描述
未知的维
可以使用一个“未知”维度。这意味着不必在 reshape 方法中为维度之一指定确切的数字。
传递 -1 作为值,NumPy 将为您计算该数字。
实例
将 8 个元素的 1D 数组转换为 2x2 元素的 3D 数组:
在这里插入图片描述

展平数组
展平数组(Flattening the arrays)是指将多维数组转换为 1D 数组。
我们可以使用 reshape(-1) 来做到这一点。
实例
把数组转换为 1D 数组:
在这里插入图片描述

十、数组迭代

数组迭代:迭代意味着逐一遍历元素。当我们在 numpy 中处理多维数组时,可以使用 python 的基本 for 循环来完成此操作。
如果我们对 1-D 数组进行迭代,它将逐一遍历每个元素。
实例
迭代以下一维数组的元素:
在这里插入图片描述
迭代 2-D 数组:
在这里插入图片描述
迭代 2-D 数组的每个标量元素:
在这里插入图片描述
使用 nditer() 迭代数组
函数 nditer() 是一个辅助函数,从非常基本的迭代到非常高级的迭代都可以使用。它解决了我们在迭代中面临的一些基本问题,让我们通过例子进行介绍。
迭代每个标量元素
在基本的 for 循环中,迭代遍历数组的每个标量,我们需要使用 n 个 for 循环,对于具有高维数的数组可能很难编写。
实例
遍历以下 3-D 数组:
在这里插入图片描述
迭代不同数据类型的数组
我们可以使用 op_dtypes 参数,并传递期望的数据类型,以在迭代时更改元素的数据类型。
NumPy 不会就地更改元素的数据类型(元素位于数组中),因此它需要一些其他空间来执行此操作,该额外空间称为 buffer,为了在 nditer() 中启用它,我们传参 flags=[‘buffered’]。
实例
以字符串形式遍历数组:
在这里插入图片描述
以不同的步长迭代
我们可以使用过滤,然后进行迭代。
实例
每遍历 2D 数组的一个标量元素,跳过 1 个元素:
在这里插入图片描述
使用 ndenumerate() 进行枚举迭代
枚举是指逐一提及事物的序号。
有时,我们在迭代时需要元素的相应索引,对于这些用例,可以使用 ndenumerate() 方法。
实例
枚举以下 2D 数组元素:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/EMIvv/article/details/106431240