视图是指对数据的引用,通过该引用亦便可访问、操作原有数据,但原有数据不会产生拷贝。如果我们对视图进行修改,它会影响到原始数据,物理内存在同一位置。 副本是一个数据的完整的拷贝,如果我们对副本进行修改,它不会影响到原始数据,物理内存不在同一位置。 视图一般发生在: Numpy 的切片操作返回原数据的视图; 调用 ndarray 的 view() 函数产生一个视图。 副本一般发生在: 在对 Pytho
Numpy 比一般的 Python 序列提供更多的索引方式。除了前面章节介绍的用整数和切片的索引外,本节深入介绍布尔型索引和花式索引。 1. 布尔型索引 在前面的章节,我们简单介绍了,可以通过一个布尔数组来索引目标数组。 1.1 比较运算符与布尔型数组 在实际使用中,可以通过比较运算符来产生一个布尔型数组。 案例 利用random模块产生一个大小为7×4的随机数数组: data = np.rand
Numpy 中包含了一些函数用于处理数组,本节重点介绍如下几类: 修改数组形状; 翻转数组; 格式转换。 1. 修改数组形状 常用的修改数组形状的函数有: 函数 说明 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 ravel 返回展开数组 1.1 reshape numpy.reshape 函数可以在不改变
NumPy 提供了很多统计函数,例如对数组求和、用于从数组中查找最小元素,最大元素,百分位标准差和方差等。 常用的统计函数如下: 函数 说明 sum 对数组中的全部或沿着轴向的元素求和。 mean、median 求数组的算术平均值、中位数 std、var 分别为标准差和方差 min、max 最小值和最大值 argmin、argmax 分别为最小和最大元素的索引 cumsum 所有元素的累计和 cu
通用函数中,接受两个标量值、并产生一个或多个标量值的情况,这里称之为二元函数。 常用的二元函数,包括算术运算、比较级运算、求余数等。 1. 常用算术运算 1.1 四则运算 当对两个数组进行四则运算,可以通过运算函数完成,需要注意的是数组必须具有相同的形状或符合数组广播规则。 四则运算具体函数说明如下: 函数 说明 add 加法运算 subtract 减法运算,从第一个数组中减去第二个数组 mult
通用函数(即 ufunc)是一种对 ndarray 中的数据执行元素级运算的函数。你可以将其看作简单函数的矢量化封装结果。本小节主要讲述仅接受一个标量值、并产生一个或多个标量值的情况,这里称之为一元函数。 Numpy 中包含了大量的这类数学运算,包括三角函数、舍入取整函数、运算函数等。 1. 三角函数 1.1 三角函数 Numpy 提供了标准的三角函数:sin()、cos()、tan(),通过接受
广播,是指 Numpy 在算术运算期间处理不同形状的数组的能力。 对数组的算术运算通常在相应的元素上进行。 如果两个阵列具有完全相同的形状,则这些操作被无缝执行,这一小节将通过数组的运算来展示广播的一些特征。 1. 常见的两种广播途径 1.1 相同大小的数组计算 如果两个数组的维度完全一致,那么运算过程是两个数组相应元素的逐个计算。 案例 定义两个完全一致的数组: arr0 = np.array(
Numpy 提供了一个迭代器对象 numpy.nditer,能够实现灵活地访问一个或者多个数组元素,达到遍历数组的目的。 1. 数组元素访问 1.1 按照内存布局打印数组元素 在默认情况下,numpy.nditer 迭代器返回的元素顺序,是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先。 案例 例如,我们对于新创建的 2×3 的数组,利用 nditer 迭代器进行顺序访问: ar
Python 的内置容器对象,例如列表,可以通过索引或切片来访问和修改。这在 ndarray 对象中也一样,ndarray 对象中的元素遵循基于零的索引,常用的索引方式:元素访问、切片索引、布尔型索引。 1. 元素访问 1.1 单一元素访问 一维数组的元素访问非常简单,和 Python 列表规则基本差不多。对单一元素的访问,索引遵循从 0 开始,依次递增 1。 案例 例如,对于创建的一维数组,我们
numpy.random 模块对 Python 内置的 random 进行了补充,增加了一些用于高效生成符合多种概率分布的样本值的函数。这一小节将详述如何用 Numpy 快速创建随机数矩阵。 1. 创建符合均匀分布的随机数组 1.1 numpy.random.rand 函数 numpy.random.rand 函数通常用来创建一个服从 “0~1” 均匀分布的随机浮点数(组),随机样本取值范围是[0
在数组的属性和方法这一小节中我们学习到了如何查看数组的大小、维数(秩)、元素的数据类型、每个元素的大小等等。这一小节将详述如何从数值范围创建特殊数组,比如指定间隔的等差数列型数组、等比数列型数组等。 1. 创建等间隔序列数组 通常定义一个等间隔序列数组(即等差数组),需要指定某些具体要素,例如起始值、终止值、步长、样本数量等。主要功能类似于 Python 内置的 range 函数,但是返回的是一个
ndarray 对象预留了一些方法供我们调用,通过这些方法,我们可以查探到数组的一些基本信息,例如 dtype 可以查看数组的数据类型。本小节将介绍其他常用的方法,比如数组的大小、维数(秩)、元素的数据类型、每个元素的大小等等。 1. 数组的维数 1.1 ndim 数组的维数,即数组的秩,用来表征数组轴的数量或维度的数量。对于行向量: arr_1 = np.array([1,2,3]) arr_1
本小节将详述 Numpy 内置的数据类型,以及如何在创建数组对象时进行灵活指定、如何查看创建好的数组类型、以及如何更改数据类型。 1. 常见数据类型 Numpy 支持的数据类型比 Python 内置的要多很多,而这也是 Numpy 如此灵活和强大的原因之一。 例如对于整数,在 Numpy 中,根据整数的位数不同所需要占据的空间大小不同,又对整数类型进行类细分,常见地可以分为 int8、int16、
本小节将详述如何创建 ndarray 对象,以及如何创建特殊的 ndarray 对象。 1. ndarray 对象 ndarray,也就是我们常用的 N 维数组对象,是 Numpy 最核心的组成部分。你可以把它视为一个快速而灵活的大数据集容器,利用这种数组你可以便捷地执行一些数学运算。 ndarray 有两个显著特点: ndarray 是一个通用的同构数据多维容器,也就是说,该容器中的每一个元素都
在开启 Numpy 之旅之前,请务必确认你有可用的 Python 环境。考虑到官方不在继续维护 Python2 ,因此建议 Python 的版本在 3.5 及以上。 1. 安装数据科学全家桶 Anaconda Anaconda 是一个集成的 Python 数据科学环境。除了有基本的 Python 包,Anaconda 还集成了 180 多个用于数据分析的第三方库。 Anaconda 因为其安装过程