Numpy 如何操作数组
发布日期:2021-05-08 06:30:47 浏览次数:10 分类:精选文章

本文共 3935 字,大约阅读时间需要 13 分钟。

数组类型

Numpy是Python中最强大的数组处理库之一,其独特之处在于能够有效管理和操作大量数据。下面我们将从基础知识入手,逐步探索Numpy的强大功能。

复数数组

在Numpy中,复数数组的支持非常方便。以下示例展示了如何创建并操作复数数组。

# --*--coding:utf-8--*--from numpy import *a = array([1 + 1j, 2, 3, 4])print('type:', a.dtype)print('实部:', a.real)print('虚部:', a.imag)print('复共轭:', a.conj())

指定数组类型

Numpy允许根据需求指定数组的数据类型。以下示例展示了如何创建不同数据类型的数组。

a = array([1, 2, 4, 9, 10], dtype=float32)print('float32数组:', a)a = array([0, 1.8, 3.3, 4.1], dtype=uint8)print('uint8数组:', a)

类型转换

Numpy提供了多种方法来进行数组类型的转换。以下示例展示了几种常用的转换方法。

a = array([1.5, -3, -3.3], dtype=float32)b = asarray(a, dtype=float64)print('asarray类型转换:', b)c = a.astype(uint8)print('astype类型转换:', c)a = array((1, 2, 3, 4), dtype=int32)d = a.view(uint8)print('view类型转换:', d)

数组方法

Numpy提供了丰富的数组方法,能够满足复杂的数据处理需求。以下示例展示了几种常用的数组方法。

a = array([[1, 2, 3], [4, 5, 6]])print('所有元素和:', sum(a))print('指定维度和:', sum(a, axis=0))print('指定维度和:', sum(a, axis=-1))print('所有元素积:', prod(a))print('指定维度积:', prod(a, axis=0))print('指定维度积:', prod(a, axis=1))a = rand(3, 4)print('随机数组:', a)print('全局最小:', a.min())print('指定轴最小:', a.min(axis=1))print('全局最大:', a.max())print('指定轴最大:', a.max(axis=-1))print('最大值位置:', a.argmax())print('最小值位置:', a.argmin())print('均值:', a.mean())print('指定维度均值:', a.mean(axis=0))print('标准差:', a.std(axis=1))print('指定维度方差:', a.var(axis=1))print('指定维度标准差:', a.std(axis=-1))print('Clipping:', a.clip(2, 4))print('PTP:', a.ptp(axis=1))print('PTP:', a.ptp())

数组排序

Numpy的排序功能非常强大,能够处理一维和多维数组。以下示例展示了如何对数组进行排序。

names = array(['Bob', 'Sue', 'Jan', 'Ad'])print('排序后的名字:', sort(names))weights = array([20, 93, 53, 62])print('排序后的权重:', sort(weights))ordered_indices = argsort(weights)print('排序后的索引:', ordered_indices)print('排序后的权重:', weights[ordered_indices])a = array([    [.2, .1, .5],    [.4, .8, .3],    [.9, .6, .7]])print('所有元素排序:', sort(a))print('按列排序:', sort(a, axis=0))sorted_array = linspace(0, 1, 5)values = array([.1, .8, .3, .31, .9, .45])print('searchsorted结果:', searchsorted(sorted_array, values))

数组形状

Numpy允许对数组的形状进行修改和调整,这对数据处理具有重要意义。以下示例展示了如何修改数组的形状。

a = arange(6)print('原始形状:', a)a.shape = 2, 3print('修改后的形状:', a)print('重新形状:', a.reshape(3, 2))a = arange(3)print('原始形状:', shape(a))y = a[newaxis, :]print('增加一维后的形状:', shape(y))print('增加多维后的形状:', shape(y))a = arange(6)print('原数组:', a)b = a.squeeze()print('去除空维后的形状:', b.shape)x = array([[0, 1, 2], [10, 11, 12]])y = array([[50, 51, 52], [60, 61, 62]])z = concatenate((x, y))print('连接后的数组:', z)a = array([[0, 1], [2, 3]])b = a.flatten()print('扁平化后的数组:', b)a = array([[0, 1], [2, 3]])print('flat属性:', a.flat)b = a.ravel()print('ravel结果:', b)a = array([1, 2, 3])b = atleast_1d(a)print('1维数组:', b)b = atleast_2d(a)print('2维数组:', b)b = atleast_3d(b)print('3维数组:', b)

对角线

Numpy提供了对数组对角线操作的便捷方法。以下示例展示了如何操作数组的对角线。

a = np.array([11, 22, 33, 44, 55, 66, 77, 88, 99])a.shape = 3, 3print('原始数组:', a)print('对角线元素:', a.diagonal())print('左移对角线:', a.diagonal(offset=-1))print('右移对角线:', a.diagonal(offset=1))i = [0, 1, 2]a[i, i] = 20print('更新后的对角线:', a)i = np.array([0, 1])a[i, i+1] = 21print('更新后的次对角线:', a)

数组与字符串的转换

Numpy提供了便捷的方法来将数组与字符串进行转换。以下示例展示了如何进行数组与字符串的转换。

a = np.array([[1, 2], [3, 4]], dtype=np.uint8)print('数组字符串表示:', a.tostring())print('Fortran格式字符串:', a.tostring(order='F'))s = a.tostring()a = np.fromstring(s, dtype=np.uint8)print('从字符串恢复数组:', a)a.shape = 2, 2

生成数组的函数

Numpy提供了多种函数来生成数组,满足不同的数据生成需求。以下示例展示了几种常用的数组生成函数。

a = np.arange(5)print('arange生成的数组:', a)x = np.linspace(0, 10, 5)print('linspace生成的数组:', x)x = np.logspace(0, 8, 5)print('logspace生成的数组:', x)x_label = np.linspace(-1, 1, 5)y_label = np.linspace(-1, 1, 5)x, y = np.meshgrid(x_label, y_label)print('生成的网格:', x, y)x, y = np.ogrid[-10:10:5, 10:30:5]print('ogrid生成的矩阵:', x)print('ogrid生成的矩阵:', y)print('行向量:', np.r_[1:10:2])print('列向量:', np.c_[1:10:2])a = np.arange(0, 10, 2)print('示例数组:', a)print('empty数组:', np.empty(5))print('empty_like数组:', np.empty_like(a))print('zeros_like数组:', np.zeros_like(a))print('ones_like数组:', np.ones_like(a))print('单位矩阵:', np.identity(5))
上一篇:Numpy 学习之矩阵、函数、二元运算及数组读写
下一篇:NLP 基础之分词、向量化、词性标注

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月02日 16时53分02秒