《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)

简介: 《Numpy 简易速速上手小册》第3章:Numpy 数组操作与变换(2024 最新版)

8090eecd4fe3d2bfb5bb236e9633ba2.png

3.1 数组合并和分割

3.1.1 基础知识

数据处理的过程中,经常会遇到需要合并多个数据集或将一个大数据集分割成小块的情况。Numpy 为这些任务提供了非常方便的工具。

  • 合并(Merging)np.concatenate() 是最基础的数组合并函数,它可以沿着指定的轴将多个数组连接起来。除此之外,np.vstack()np.hstack() 分别用于垂直和水平地堆叠数组。
  • 分割(Splitting):与合并相对的是分割,np.split()np.vsplit()np.hsplit() 分别用于沿指定轴分割数组。

3.1.2 完整案例:合并多个数据集

假设你正在处理一个实验的数据,实验数据被存储在几个不同的数组中,你需要将这些数组合并为一个大数组进行分析。

import numpy as np
# 三个不同的数据集
data_set_1 = np.array([1, 2, 3])
data_set_2 = np.array([4, 5, 6])
data_set_3 = np.array([7, 8, 9])
# 水平合并
merged_data_horizontal = np.concatenate([data_set_1, data_set_2, data_set_3])
print("Horizontal Merge:", merged_data_horizontal)
# 垂直合并
merged_data_vertical = np.vstack([data_set_1, data_set_2, data_set_3])
print("Vertical Merge:\n", merged_data_vertical)

在这个例子中,我们演示了如何水平和垂直地合并三个数据集。

3.1.3 拓展案例 1:分割大型数据集

现在,假设你有一个大型数据集,由于某些原因,你需要将其分割成几个小的数据块进行处理。

# 一个大型数据集
large_data_set = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
# 分割数据集
split_data = np.split(large_data_set, [3, 6])
print("Split Data:", split_data)

在这个案例中,我们将大型数据集在指定的索引处分割成了三个不同的小数组。

3.1.4 拓展案例 2:更复杂的合并场景

假设你需要处理的数据集包含多个维度,你需要在不同的轴上进行合并操作。

# 两个二维数据集
data_set_4 = np.array([[1, 2, 3], [4, 5, 6]])
data_set_5 = np.array([[7, 8, 9], [10, 11, 12]])
# 沿着第一个轴合并
merged_data_1 = np.concatenate([data_set_4, data_set_5], axis=0)
print("Merged along first axis:\n", merged_data_1)
# 沿着第二个轴合并
merged_data_2 = np.concatenate([data_set_4, data_set_5], axis=1)
print("Merged along second axis:\n", merged_data_2)

在这个例子中,我们展示了如何沿着不同的轴合并多维数据集。

通过这些案例,你可以看到 Numpy 在数组合并和分割方面的强大功能。无论是简单的数据拼接,还是复杂的多维数据处理,Numpy 都能提供灵活而高效的解决方案。掌握了这些技巧,你就能在数据分析的世界中游刃有余!


3.2 数组的重塑和转置

3.2.1 基础知识

在数据处理中,经常需要改变数组的形状或维度,这正是 Numpy 数组重塑(Reshaping)和转置(Transposing)的用武之地。

  • 重塑(Reshaping)np.reshape() 可以改变数组的形状而不改变其数据。重要的是,新形状的总元素数量需要与原始数组相同。
  • 转置(Transposing)np.transpose() 或简单的 .T 属性,可以交换数组的行和列,即沿对角线翻转数组。

这些操作使得数组能够适应各种数据操作和算法要求,增强了数据的可用性和灵活性。

3.2.2 完整案例:图像处理

假设你正在处理图像数据,这些数据存储在三维数组中。你需要调整这些数据的形状,以适应某个特定的图像处理算法的要求。

import numpy as np
# 假设我们有一个代表图像的 3x3x3 的数组
image_data = np.arange(27).reshape((3, 3, 3))
print("Original Image Data:\n", image_data)
# 重塑数组以符合算法要求
reshaped_data = image_data.reshape((9, 3))
print("Reshaped Image Data:\n", reshaped_data)
# 转置数组
transposed_data = reshaped_data.T
print("Transposed Image Data:\n", transposed_data)

在这个例子中,我们首先重塑了图像数据,然后对其进行了转置,以满足某个特定处理流程的需求。

3.2.3 拓展案例 1:时间序列数据重塑

假设你在处理一组时间序列数据,需要将这些数据重塑以便进行时间序列分析。

# 一周每天的数据,假设每天有三个数据点
time_series_data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21])
# 将数据重塑为 7x3 的数组,每行代表一天
reshaped_time_series = time_series_data.reshape((7, 3))
print("Reshaped Time Series Data:\n", reshaped_time_series)

在这个案例中,我们将一维的时间序列数据重塑成二维数组,使每行代表一天。

3.2.4 拓展案例 2:动态数组重塑

有时候,你可能不知道某个维度的确切大小,但你知道希望数组有多少行或列。在这种情况下,你可以在重塑时使用 -1 让 Numpy 自动计算这个维度的大小。

# 生成一个 4x4 的数组
data = np.arange(16).reshape((4, 4))
print("Original Data:\n", data)
# 自动计算列的数量,只指定行数为 2
auto_reshaped_data = data.reshape((2, -1))
print("Auto Reshaped Data:\n", auto_reshaped_data)

在这个例子中,我们只指定了行数为 2,而让 Numpy 自动计算列数。

通过这些案例,你可以看到 Numpy 在数组重塑和转置方面的灵活性。无论是简单的形状调整还是复杂的数据重组,Numpy 都能提供简单而有效的解决方案。掌握了这些技能,你在数据处理和分析方面的能力将更上一层楼!


3.3 数组的排序和筛选

3.3.1 基础知识

在数据分析和处理中,排序和筛选是常见的操作。Numpy 提供了多种工具来进行这些操作,让处理大型数据集变得简单高效。

  • 排序(Sorting)np.sort() 可以对数组进行排序。你还可以使用 argsort() 获取排序后的索引,这在需要按排序顺序重新排列其他相关数组时非常有用。
  • 筛选(Filtering):通过布尔索引,你可以根据特定条件筛选出数组的子集。例如,array[array > 0] 会返回所有正数元素。

3.3.2 完整案例:股市数据分析

假设你有一组股市的收盘价数据,你需要对这些数据进行排序并找出最高的几个收盘价。

import numpy as np
# 一周的股市收盘价
closing_prices = np.array([120.45, 121.30, 119.85, 122.05, 123.90])
# 对收盘价进行排序
sorted_prices = np.sort(closing_prices)
print("Sorted Closing Prices:", sorted_prices)
# 找出最高的三个收盘价
top_three = sorted_prices[-3:]
print("Top Three Closing Prices:", top_three)
# 使用 argsort 获取索引
indices = np.argsort(closing_prices)
print("Indices of Sorted Prices:", indices)

在这个案例中,我们对一周的股市收盘价进行了排序,并找出了最高的三个收盘价。

3.3.3 拓展案例 1:复杂数据筛选

假设你正在处理一个数据集,其中包含多个特征,并且你需要根据特定条件筛选数据。

# 假设每行是一个数据点,列代表不同的特征
data = np.array([[1.5, 2.3, 3.2],
                 [4.1, -1.2, 0.5],
                 [-3.2, 1.1, -2.2]])
# 筛选出所有第二个特征大于 1 的数据点
filtered_data = data[data[:, 1] > 1]
print("Filtered Data:\n", filtered_data)

在这个案例中,我们根据第二个特征的值筛选了数据。

3.3.4 拓展案例 2:多条件排序

假设你需要根据多个条件对一个数据集进行排序。

# 假设每行是一个学生的信息:年龄,成绩
students = np.array([[20, 82], [19, 91], [21, 85], [20, 75]])
# 首先根据成绩降序排序,然后根据年龄升序排序
sorted_students = students[np.lexsort((-students[:, 1], students[:, 0]))]
print("Students sorted by grade and age:\n", sorted_students)

在这个案例中,我们使用了 np.lexsort(),它允许我们根据多个键进行排序,先按成绩降序排序,然后在成绩相同的情况下按年龄升序排序。

通过这些案例,你可以看到 Numpy 如何灵活地处理数组的排序和筛选。这些操作是数据预处理和分析的重要组成部分,掌握它们将使你能够更有效地处理和解释数据。

目录
相关文章
|
4月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
457 1
|
计算机视觉 Python
PIL图像转换为Numpy数组:技术与案例详解
本文介绍了如何将PIL图像转换为Numpy数组,以便利用Numpy进行数学运算和向量化操作。首先简要介绍了PIL和Numpy的基本功能,然后详细说明了转换过程,包括导入库、打开图像文件、使用`np.array()`或`np.asarray()`函数进行转换,并通过打印数组形状验证转换结果。最后,通过裁剪、旋转和缩放等案例展示了转换后的应用,以及如何将Numpy数组转换回PIL图像。此外,还介绍了处理base64编码图像的完整流程。
569 4
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
504 10
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
290 1
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
288 2
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
502 4
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
779 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
4月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
280 0
|
6月前
|
机器学习/深度学习 API 异构计算
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
JAX是Google开发的高性能数值计算库,旨在解决NumPy在现代计算需求下的局限性。它不仅兼容NumPy的API,还引入了自动微分、GPU/TPU加速和即时编译(JIT)等关键功能,显著提升了计算效率。JAX适用于机器学习、科学模拟等需要大规模计算和梯度优化的场景,为Python在高性能计算领域开辟了新路径。
591 0
JAX快速上手:从NumPy到GPU加速的Python高性能计算库入门教程
|
6月前
|
存储 数据采集 数据处理
Pandas与NumPy:Python数据处理的双剑合璧
Pandas与NumPy是Python数据科学的核心工具。NumPy以高效的多维数组支持数值计算,适用于大规模矩阵运算;Pandas则提供灵活的DataFrame结构,擅长处理表格型数据与缺失值。二者在性能与功能上各具优势,协同构建现代数据分析的技术基石。
539 0