说明
NumPy 教程 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
NumPy 提供好几种创建数组的方法,例如,您可以使用 array 函数从常规 Python 列表或元组创建数组,根据序列中元素的类型推导所得数组的类型。
ndarray 是相同类型和大小的项目的(通常为固定大小)多维容器。 数组中维和项的数量由其形状定义,形状是 N 个非负整数的元组,用于指定每个维的大小。 数组中项目的类型由单独的数据类型对象(dtype)指定,其中一个与每个 ndarray 相关联。
与 Python 中的其他容器对象一样,可以通过对数组建立索引或切片(使用N个整数)以及 ndarray 的方法和属性来访问和修改 ndarray 的内容。
一个大小为 2 x 3 的二维数组,由4个字节的整数元素组成:
x = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
type(x)
# <class 'numpy.ndarray'>
x.shape
# (2, 3)
x.dtype
# dtype('int32')
NumPy 提供了多种的数据生成方法,可以满足我们日常数据推演,数据测算,数据调研等各个方面的需求。创建数组有5种通用机制:
另外还有复制,联接或以其他方式扩展或变异现有阵列的方法。
通常,可以通过使用 array() 函数将 Python 中以数组状结构排列的数值数据转换为数组。 最明显的例子是列表和元组,有关使用的详细信息,请参见 array() 的文档。 一些对象可能支持数组协议,并允许以这种方式转换为数组。 查找是否可以使用 array() 将对象转换为 numpy 数组的简单方法是,以交互方式尝试并查看其是否有效。
例如:
x = np.array([2,3,1,0])
x = np.array([2, 3, 1, 0])
# note mix of tuple and lists, and types
x = np.array([[1,2.0],[0,0],(1+1j,3.)])
x = np.array([[ 1.+0.j, 2.+0.j], [ 0.+0.j, 0.+0.j], [ 1.+1.j, 3.+0.j]])
NumPy 具有以下可以自身从无到创建数组的内置功能:
zeros(shape) 将创建一个数组,其中填充了具有指定形状的值全为 0 数组,默认dtype是float64。
np.zeros((2, 3))
'''
array([[0., 0., 0.],
[0., 0., 0.]])
'''
ones(shape) 将创建一个填充值全为 1 的数组,它在所有其他方面都与 zeros(shape) 相同。
arange() 将创建具有规则递增值的数组,这里将给出一些示例:
np.arange(10)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(2, 10, dtype=float)
# array([ 2., 3., 4., 5., 6., 7., 8., 9.])
np.arange(2, 3, 0.1)
# array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
请注意,后续将介绍上例 arange 最后用法的一些细微之处。
linspace() 将创建具有指定数量元素的数组,并在指定的开始值和结束值之间等距间隔,例如:
np.linspace(1., 4., 6)
# array([ 1. , 1.6, 2.2, 2.8, 3.4, 4. ])
这个创建函数的优点是可以保证元素的数量以及起点和终点,而 arange() 通常不能保证任意的起点,终点和步长值。
indices() 将创建一组数组(堆叠为一维数组),每个维度一个,每个维度代表该维度的变化,一个例子比口头描述更能说明问题:
np.indices((3,3))
'''
array([[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]],
[[0, 1, 2],
[0, 1, 2],
[0, 1, 2]]])
'''
这对于在规则网格上评估多维函数特别有用。
大概这是大型数组创建的最常见情况。当然,这些细节在很大程度上取决于磁盘上数据的格式,因此本节仅能提供有关如何处理各种格式的一般指导。
各个字段具有用于数组数据的标准格式。以下列出了使用已知的 python 库读取它们并返回 numpy 数组的库(可能还有其他可能读取并转换为 numpy 数组的库,因此也请检查最后一部分)
'''
HDF5: h5py
FITS: Astropy
'''
无法直接读取但不难转换的格式示例包括 PIL 之类的库支持的那些格式(能够读取和写入许多图像格式,例如 jpg,png 等)。
逗号分隔值文件(CSV)被广泛使用(以及 Excel 等程序的导出和导入选项)。有多种方法可以在 Python 中读取这些文件。 Python 中有 CSV 函数,而 pylab 中有函数(matplotlib的一部分)可以使用 。scipy 中的 io 包读取更多通用的ascii文件。
一个人可以使用多种方法。如果文件具有相对简单的格式,则可以编写一个简单的 I/O 库,并使用 numpy fromfile() 函数和 .tofile() 方法直接读取和写入 numpy 数组(不过请注意您的字节序!)或存在读取数据的 C++ 库,可以用多种技术包装该库,尽管这肯定需要做更多的工作,并且需要相当多的高级知识才能与 C 或 C++ 交互。
有些库可用于生成特殊用途的数组,并且无法枚举所有库。最常见的用途是可以生成随机值数组的许多数组生成函数,以及一些实用程序函数来生成特殊矩阵(例如 diagonal 对角线)。
更新时间:Dec. 30, 2020, 11:09 p.m. 标签:numpy 数组 创建