如何操作多维数组

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程将探讨如何使用NumPy在Python中进行强大的多维数组操作。无论你是数据科学家、研究人员还是程序员,了解如何高效处理复杂的数组结构对于高级计算任务和数据分析都至关重要。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/DataScienceandMachineLearningGroup(["Data Science and Machine Learning"]) python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/AdvancedTopicsGroup -.-> python/iterators("Iterators") python/AdvancedTopicsGroup -.-> python/generators("Generators") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/DataScienceandMachineLearningGroup -.-> python/numerical_computing("Numerical Computing") python/DataScienceandMachineLearningGroup -.-> python/data_analysis("Data Analysis") subgraph Lab Skills python/lists -.-> lab-419410{{"如何操作多维数组"}} python/function_definition -.-> lab-419410{{"如何操作多维数组"}} python/arguments_return -.-> lab-419410{{"如何操作多维数组"}} python/iterators -.-> lab-419410{{"如何操作多维数组"}} python/generators -.-> lab-419410{{"如何操作多维数组"}} python/data_collections -.-> lab-419410{{"如何操作多维数组"}} python/numerical_computing -.-> lab-419410{{"如何操作多维数组"}} python/data_analysis -.-> lab-419410{{"如何操作多维数组"}} end

NumPy 数组基础

NumPy 数组简介

NumPy(数值 Python)是 Python 中科学计算的基础库,提供了用于处理多维数组的强大工具。数组是 NumPy 的核心数据结构,支持高效的数值运算和高级数学功能。

创建 NumPy 数组

基本数组创建

import numpy as np

## 创建一维数组
one_dim_array = np.array([1, 2, 3, 4, 5])

## 创建二维数组
two_dim_array = np.array([[1, 2, 3], [4, 5, 6]])

## 使用特定函数创建数组
zeros_array = np.zeros((3, 3))  ## 3x3 的零数组
ones_array = np.ones((2, 4))    ## 2x4 的一数组
range_array = np.arange(0, 10, 2)  ## 从 0 到 10 步长为 2 的数组

数组数据类型

graph TD A[NumPy 数组数据类型] --> B[数值类型] A --> C[布尔类型] A --> D[字符串类型] B --> E[int8, int16, int32, int64] B --> F[float16, float32, float64] B --> G[complex64, complex128]
数据类型 描述 示例
int 整数 np.array([1, 2, 3], dtype=int)
float 浮点数 np.array([1.1, 2.2, 3.3], dtype=float)
complex 复数 np.array([1+2j, 3+4j])

数组属性

## 基本数组属性
print(one_dim_array.shape)    ## 数组维度
print(one_dim_array.dtype)    ## 数据类型
print(one_dim_array.ndim)     ## 维度数量
print(one_dim_array.size)     ## 元素总数

重塑数组

## 重塑数组
original_array = np.arange(12)
reshaped_array = original_array.reshape(3, 4)

数组索引和切片

## 基本索引
print(two_dim_array[0, 1])  ## 访问特定元素
print(two_dim_array[:, 1])  ## 选择整列

## 高级切片
subset = two_dim_array[0:2, 1:3]

性能考量

由于以下原因,NumPy 数组在数值运算方面比标准 Python 列表快得多:

  • 连续内存存储
  • 向量化操作
  • 优化的 C 实现

LabEx 提示

学习 NumPy 时,实践是关键。LabEx 提供交互式环境来实验 NumPy 数组并提升你在科学计算方面的技能。

最佳实践

  1. 始终将 NumPy 导入为 np
  2. 使用适当的数据类型
  3. 利用向量化操作
  4. 处理大型数组时注意内存使用

数组运算

算术运算

逐元素运算

import numpy as np

## 基本算术运算
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])

## 逐元素加法
add_result = a + b

## 逐元素乘法
mult_result = a * b

## 标量运算
scalar_mult = a * 2

数学函数

## 高级数学运算
sin_values = np.sin(a)
exp_values = np.exp(a)
sqrt_values = np.sqrt(a)

比较运算

## 比较运算
comparison = a > 2
masked_array = np.where(a > 2, a, 0)

聚合函数

graph TD A[NumPy 聚合函数] --> B[求和] A --> C[均值] A --> D[最大值] A --> E[最小值] A --> F[标准差]
函数 描述 示例
np.sum() 计算总和 np.sum(array)
np.mean() 计算平均值 np.mean(array)
np.max() 找到最大值 np.max(array)
np.min() 找到最小值 np.min(array)

线性代数运算

## 矩阵运算
matrix_a = np.array([[1, 2], [3, 4]])
matrix_b = np.array([[5, 6], [7, 8]])

## 矩阵乘法
matrix_product = np.dot(matrix_a, matrix_b)

## 转置
transposed_matrix = matrix_a.T

## 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(matrix_a)

广播

## 广播示例
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([10, 20, 30])

## 自动维度扩展
result = a + b

统计运算

## 统计计算
data = np.array([1, 2, 3, 4, 5])

## 各种统计函数
mean_value = np.mean(data)
median_value = np.median(data)
std_deviation = np.std(data)
variance = np.var(data)

LabEx 洞察

在实践数组运算时,LabEx 建议专注于向量化运算以获得最佳性能和可读性。

高级技巧

  1. 使用向量化运算而非循环
  2. 利用广播进行复杂计算
  3. 理解内存效率
  4. 使用专门的 NumPy 函数

高级数组技术

花式索引

import numpy as np

## 创建示例数组
arr = np.array([10, 20, 30, 40, 50])

## 布尔索引
mask = arr > 25
filtered_arr = arr[mask]

## 整数数组索引
indices = np.array([0, 2, 4])
selected_elements = arr[indices]

结构化数组

## 创建结构化数组
employee_dtype = np.dtype([
    ('name', 'U10'),
    ('age', 'i4'),
    ('salary', 'f8')
])

employees = np.array([
    ('Alice', 30, 5000.0),
    ('Bob', 35, 6000.0)
], dtype=employee_dtype)

高级重塑技术

graph TD A[数组重塑] --> B[展平] A --> C[ravel] A --> D[转置] A --> E[调整大小]
技术 描述 示例
flatten() 创建展平数组的副本 arr.flatten()
ravel() 创建展平数组的视图 arr.ravel()
reshape() 更改数组维度 arr.reshape(2,3)

向量化操作

## 向量化条件赋值
arr = np.array([1, 2, 3, 4, 5])
np.where(arr > 3, arr * 2, arr)

## 通用函数(ufuncs)
def custom_operation(x):
    return x ** 2 + 2 * x

vectorized_func = np.vectorize(custom_operation)
result = vectorized_func(arr)

内存高效技术

## 内存视图和引用
a = np.arange(10)
b = a[2:7]  ## 创建视图,而非副本

## 内存高效数据类型
small_int_array = np.array([1, 2, 3], dtype=np.int8)

高级数值计算

## 线性代数操作
matrix = np.random.rand(3, 3)

## 矩阵分解
U, S, V = np.linalg.svd(matrix)

## 求解线性方程
A = np.array([[1, 2], [3, 4]])
B = np.array([5, 11])
solution = np.linalg.solve(A, B)

性能优化

## Numba 加速
from numba import jit

@jit(nopython=True)
def fast_computation(arr):
    return arr ** 2 + 2 * arr

随机数生成

## 高级随机生成
random_normal = np.random.normal(0, 1, (3, 3))
random_uniform = np.random.uniform(0, 1, (2, 2))

LabEx Pro 提示

高级数组技术需要实践。LabEx 建议尝试不同方法,以了解它们的细微行为和性能特征。

最佳实践

  1. 使用向量化提高性能
  2. 理解内存管理
  3. 利用专门的 NumPy 函数
  4. 分析并优化数值计算

总结

通过掌握 NumPy 的数组操作技术,Python 程序员可以开启复杂的数据处理能力。本教程为你提供了创建、转换和优化多维数组的基本技能,从而实现更高效、强大的科学计算和数据分析工作流程。