《Numpy 简易速速上手小册》第2章:Numpy 数据类型和数组构造(2024 最新版)

简介: 《Numpy 简易速速上手小册》第2章:Numpy 数据类型和数组构造(2024 最新版)

8090eecd4fe3d2bfb5bb236e9633ba2.png

2.1 理解 Numpy 数据类型

2.1.1 基础知识

欢迎来到 Numpy 数据类型的奇妙世界!数据类型在 Numpy 中扮演着重要角色,因为它们定义了数组中元素的类型和所占的内存大小。与 Python 原生类型相比,Numpy 提供了更多的数据类型,这使得数组操作更加高效和精确。这些类型包括:

  • 整型 (int): 包括 int8, int16, int32, int64,分别对应不同大小的整数。
  • 浮点型 (float):float16, float32, float64,用于存储小数。
  • 复数型 (complex):complex64, complex128,用于存储复数。
  • 布尔型 (bool): 用于存储 TrueFalse

在 Numpy 中,你可以在创建数组时指定数据类型,这对于优化性能和内存使用非常关键。

2.1.2 完整案例:科学数据处理

假设你正在处理一组科学实验数据,这些数据包括测量的长度、时间和一些布尔标志。

import numpy as np
# 创建不同类型的数组
lengths = np.array([2.5, 3.8, 4.1], dtype=np.float32)
times = np.array([20, 35, 55], dtype=np.int64)
flags = np.array([True, False, True], dtype=np.bool_)
# 检查数组的数据类型
print("Data Types:", lengths.dtype, times.dtype, flags.dtype)
# 执行一些计算
average_length = np.mean(lengths)
total_time = np.sum(times)
valid_measurements = np.count_nonzero(flags)
print("Average Length:", average_length)
print("Total Time:", total_time)
print("Valid Measurements:", valid_measurements)

这个案例展示了如何为不同的数据选择合适的数据类型,并利用这些类型进行基本的数学计算。

2.1.3 拓展案例 1:图像数据类型转换

假设你在处理图像数据,需要将一张彩色图像转换为灰度图像。

# 假设 image 是一个 RGB 图像
image = np.random.randint(0, 256, (100, 100, 3), dtype=np.uint8)
# 转换为灰度图像
gray_image = np.mean(image, axis=2).astype(np.uint8)
print("Gray Image Shape:", gray_image.shape)

在这个案例中,我们使用 np.mean() 计算每个像素的平均值来获取灰度图像,并使用 astype() 方法将结果转换为 uint8 类型。

2.1.4 拓展案例 2:处理复数数组

让我们考虑一个更高级的场景,假设你需要处理一些涉及复数的科学计算。

# 创建一个复数数组
complex_data = np.array([2+3j, 3+4j, 5+7j], dtype=np.complex128)
# 计算复数的模
magnitudes = np.abs(complex_data)
print("Magnitudes:", magnitudes)

在这个案例中,我们创建了一个 complex128 类型的数组,用于存储复数。然后我们计算了这些复数的模(即复数的绝对值)。

通过这些案例,你可以看到 Numpy 如何处理不同类型的数据。选择正确的数据类型不仅有助于提高计算效率,还可以确保数据分析的准确性。掌握了这些基础知识,就可以在数据分析和科学计算中更加得心应手了!


2.2 从列表和其他数据结构创建数组

2.2.1 基础知识

Numpy 提供了一系列方便的方法来将 Python 中常见的数据结构(如列表、元组)转换成 Numpy 数组。这个转换过程不仅简单高效,而且为后续的数据处理和分析打下基础。

  • 从列表创建:使用 np.array() 方法,可以将 Python 列表转换为 Numpy 数组。
  • 从元组创建:类似于列表,元组也可以通过 np.array() 转换。
  • 多维数组:传递列表的列表(或元组的元组等)给 np.array() 可以创建多维数组。
  • 指定数据类型:在转换过程中,你可以通过 dtype 参数指定数组的数据类型。

2.2.2 完整案例:科学实验数据

假设你正在处理一组科学实验的观测数据。这些数据存储在几个不同的 Python 列表中,你需要将它们转换为 Numpy 数组以进行进一步分析。

import numpy as np
# 一些科学观测数据,存储在列表中
temperature = [20.1, 22.3, 19.8, 21.0]
pressure = [101.2, 102.3, 100.8, 101.9]
humidity = [45, 50, 55, 60]
# 转换为 Numpy 数组
temperature_array = np.array(temperature)
pressure_array = np.array(pressure)
humidity_array = np.array(humidity, dtype=np.float32)
# 计算平均温度和压力
average_temperature = np.mean(temperature_array)
average_pressure = np.mean(pressure_array)
print("Average Temperature:", average_temperature)
print("Average Pressure:", average_pressure)

在这个例子中,我们将列表转换成了 Numpy 数组,并进行了一些基本的统计计算。

2.2.3 拓展案例 1:从嵌套列表创建多维数组

假设你有一个嵌套列表,代表了一个矩阵,你想将其转换为二维数组。

# 嵌套列表表示的矩阵
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
# 转换为 Numpy 二维数组
matrix_array = np.array(matrix)
# 计算矩阵的迹(对角线元素之和)
trace = np.trace(matrix_array)
print("Trace of Matrix:", trace)

在这个案例中,我们从嵌套列表创建了一个二维数组,并计算了矩阵的迹。

2.2.4 拓展案例 2:从不规则数据结构创建数组

假设你需要处理一组不规则的数据结构(比如列表中嵌套的列表长度不一)。

# 不规则的数据结构
irregular_data = [
    [1, 2, 3],
    [4, 5],
    [6]
]
# 尝试转换为 Numpy 数组
try:
    irregular_array = np.array(irregular_data)
    print("Irregular Array:\n", irregular_array)
except ValueError as e:
    print("Error:", e)

在这个案例中,我们尝试从一个不规则的数据结构创建数组。由于 Numpy 数组要求所有元素长度一致,这将会引发一个错误。这种情况下,你可能需要先标准化数据结构,或者考虑使用其他数据类型(如 Python 列表或 Pandas 数据帧)。

通过这些案例,我们看到了将常见的 Python 数据结构转换为 Numpy 数组的多样性和灵活性。这个过程对于数据预处理和后续分析至关重要,是进行有效数据操作的第一步。


2.3 特殊数组:零数组、单位矩阵和随机数组

2.3.1 基础知识

Numpy 提供了创建特殊数组的便捷方法,这些数组在数据处理和科学计算中经常使用。

  • 零数组 (zeros):创建元素全部为 0 的数组。这在你需要一个基线数组来进行累加或其他操作时非常有用。
  • 单位矩阵 (eye):创建一个主对角线上都是 1,其它位置为 0 的二维数组。单位矩阵在线性代数中非常重要,常用于初始化矩阵操作。
  • 随机数组 (random):创建元素随机的数组。Numpy 的 random 模块可以生成各种分布的随机数。

2.3.2 完整案例:创建和使用特殊数组

假设你正在处理一个数据集,需要初始化一些特殊的数组结构进行计算。

import numpy as np
# 创建一个 3x3 的零数组
zero_array = np.zeros((3, 3))
print("Zero Array:\n", zero_array)
# 创建一个 4x4 的单位矩阵
identity_matrix = np.eye(4)
print("Identity Matrix:\n", identity_matrix)
# 创建一个 3x3 的随机数组
random_array = np.random.random((3, 3))
print("Random Array:\n", random_array)
# 使用零数组进行累加
for i in range(3):
    zero_array[i, i] = i
print("Updated Zero Array:\n", zero_array)

在这个例子中,我们创建了零数组、单位矩阵和随机数组,并演示了如何用循环更新零数组的对角线元素。

2.3.3 拓展案例 1:使用单位矩阵进行矩阵运算

单位矩阵在矩阵运算中,特别是在求矩阵的逆或解线性方程组时非常重要。

# 创建一个 3x3 的随机矩阵
matrix = np.random.random((3, 3))
# 创建单位矩阵
identity = np.eye(3)
# 矩阵与单位矩阵相乘
result = np.dot(matrix, identity)
print("Result of Multiplication:\n", result)

这个案例展示了单位矩阵乘以任何矩阵都会得到原矩阵本身。

2.3.4 拓展案例 2:生成特定分布的随机数组

Numpy 允许你生成符合特定统计分布的随机数组,如正态分布。

# 生成一个符合正态分布的随机数组
normal_dist_array = np.random.normal(0, 1, (3, 3))
print("Normal Distribution Array:\n", normal_dist_array)

在这个案例中,我们生成了一个平均值为 0,标准差为 1 的正态分布随机数组。

通过这些案例,我们看到 Numpy 如何便捷地创建各种特殊数组,并在实际情况中如何使用它们。这些特殊数组是数据分析和科学计算中不可或缺的工具,能有效地简化和加速计算过程。

目录
相关文章
|
3月前
|
索引 Python
NumPy 教程 之 Numpy 数组操作 28
NumPy 提供多种数组操作功能,包括修改形状、翻转、连接和分割等。本教程重点介绍元素的添加与删除,如使用 `resize`、`append`、`insert` 和 `delete` 函数。其中 `numpy.insert` 可在指定索引前插入值,支持标量或数组插入。示例展示了不同情况下 `insert` 的使用方法,包括不指定轴时的数组扁平化插入,以及沿特定轴进行广播插入。
38 2
|
3月前
|
数据处理 索引 Python
NumPy 数组操作:和普通操作相较,到底蕴含着怎样令人费解的独特魅力?
【8月更文挑战第19天】NumPy是Python科学计算核心库,提供高效数组操作。不同于Python列表直接列举创建,NumPy用`np.array()`创建数组。两者都支持索引和切片,但NumPy性能更优。数学运算方面,NumPy支持简洁的向量化操作,如`my_array * 2`,无需循环。NumPy还简化了数组形状变换,如使用`reshape()`方法。此外,NumPy数组要求元素类型一致,提高了内存使用效率和计算速度。这些特点使NumPy在科学计算和数据分析中不可或缺。
32 0
|
1月前
|
Python
Numpy学习笔记(四):如何将数组升维、降维和去重
本文介绍了如何使用NumPy库对数组进行升维、降维和去重操作。
34 1
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧2
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
69 10
|
1月前
|
Python
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
NumPy库中的`np.concatenate`和`np.append`函数,它们分别用于沿指定轴拼接多个数组以及在指定轴上追加数组元素。
27 0
Numpy学习笔记(五):np.concatenate函数和np.append函数用于数组拼接
|
1月前
|
Python
使用 NumPy 进行数组操作的示例
使用 NumPy 进行数组操作的示例
|
1月前
|
索引 Python
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧1
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
87 4
|
1月前
|
机器学习/深度学习 并行计算 调度
CuPy:将 NumPy 数组调度到 GPU 上运行
CuPy:将 NumPy 数组调度到 GPU 上运行
61 1
|
2月前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
2月前
|
API Python
Numpy 数组的一些集合操作
Numpy 数组的一些集合操作
31 0