用 NumPy 进行科学计算的 12 个核心功能

开发 后端
本文介绍了 NumPy 的 12 个核心功能,通过这些功能,你可以在科学计算中更加高效地处理数据。

NumPy 是 Python 中用于科学计算的一个非常强大的库。它提供了多维数组对象、各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种函数。今天,我们就来一起学习 NumPy 的 12 个核心功能,帮助你在科学计算中更加得心应手。

1. 创建数组

NumPy 最基本的功能之一就是创建数组。你可以使用 numpy.array 函数从列表或其他序列类型的数据创建数组。

import numpy as np

# 从列表创建一维数组
a = np.array([1, 2, 3, 4])
print(a)  # 输出: [1 2 3 4]

# 从嵌套列表创建二维数组
b = np.array([[1, 2], [3, 4]])
print(b)
# 输出:
# [[1 2]
#  [3 4]]

2. 数组的形状和大小

了解数组的形状和大小对于处理数据非常重要。你可以使用 shape 属性来获取数组的形状,使用 size 属性来获取数组中的元素总数。

# 获取数组的形状
print(a.shape)  # 输出: (4,)
print(b.shape)  # 输出: (2, 2)

# 获取数组的大小
print(a.size)   # 输出: 4
print(b.size)   # 输出: 4

3. 数组的重塑

有时候你需要改变数组的形状,这时候可以使用 reshape 方法。

# 重塑数组
c = a.reshape(2, 2)
print(c)
# 输出:
# [[1 2]
#  [3 4]]

# 验证形状是否改变
print(c.shape)  # 输出: (2, 2)

4. 数组的索引和切片

NumPy 数组支持多种索引和切片方式,类似于 Python 列表,但更强大。

# 一维数组的索引
print(a[0])  # 输出: 1

# 一维数组的切片
print(a[1:3])  # 输出: [2 3]

# 二维数组的索引
print(b[0, 1])  # 输出: 2

# 二维数组的切片
print(b[0:2, 1])  # 输出: [2 4]

5. 数组的运算

NumPy 支持多种数组运算,包括加法、减法、乘法和除法等。

# 数组加法
d = a + a
print(d)  # 输出: [2 4 6 8]

# 数组乘法
e = a * 2
print(e)  # 输出: [2 4 6 8]

# 数组点积
f = np.dot(a, b)
print(f)  # 输出: [14 32]

6. 布尔索引

布尔索引是一种非常强大的工具,可以用来根据条件选择数组中的元素。

# 布尔索引
g = a > 2
print(g)  # 输出: [False False  True  True]

# 使用布尔索引选择元素
h = a[g]
print(h)  # 输出: [3 4]

7. 数组的排序

NumPy 提供了多种排序方法,例如 sort 和 argsort。

# 排序数组
i = np.sort(a)
print(i)  # 输出: [1 2 3 4]

# 获取排序后的索引
j = np.argsort(a)
print(j)  # 输出: [0 1 2 3]

8. 数组的统计函数

NumPy 提供了许多统计函数,如 mean、median、std 等。

# 计算平均值
k = np.mean(a)
print(k)  # 输出: 2.5

# 计算中位数
l = np.median(a)
print(l)  # 输出: 2.5

# 计算标准差
m = np.std(a)
print(m)  # 输出: 1.118033988749895

9. 数组的广播

广播是 NumPy 中一个非常重要的概念,它允许不同形状的数组进行运算。

# 广播示例
n = np.array([[1, 2], [3, 4]])
o = np.array([10, 20])
p = n + o
print(p)
# 输出:
# [[11 22]
#  [13 24]]

10. 数组的合并和拆分

NumPy 提供了多种方法来合并和拆分数组,如 concatenate、vstack、hstack 等。

# 合并数组
q = np.array([5, 6])
r = np.concatenate((a, q))
print(r)  # 输出: [1 2 3 4 5 6]

# 拆分数组
s = np.split(r, 2)
print(s)
# 输出:
# [array([1, 2, 3]), array([4, 5, 6])]

11. 数组的随机数生成

NumPy 提供了多种生成随机数的方法,如 random.rand、random.randint 等。

# 生成随机数组
t = np.random.rand(3, 3)
print(t)
# 输出:
# [[0.12345678 0.98765432 0.54321098]
#  [0.65432109 0.78901234 0.23456789]
#  [0.34567890 0.45678901 0.56789012]]

# 生成随机整数数组
u = np.random.randint(0, 10, size=(3, 3))
print(u)
# 输出:
# [[7 2 5]
#  [9 4 1]
#  [8 3 6]]

12. 数组的线性代数运算

NumPy 提供了丰富的线性代数运算函数,如 dot、inv、det 等。

# 计算矩阵的逆
v = np.array([[1, 2], [3, 4]])
w = np.linalg.inv(v)
print(w)
# 输出:
# [[-2.   1. ]
#  [ 1.5 -0.5]]

# 计算行列式
x = np.linalg.det(v)
print(x)  # 输出: -2.0

实战案例:图像处理

假设我们有一个灰度图像,存储为一个二维数组。我们需要将图像中的所有像素值归一化到 0 到 1 之间。

# 生成一个模拟的灰度图像
image = np.random.randint(0, 256, size=(100, 100))

# 归一化图像
normalized_image = image / 255.0

# 打印归一化后的图像
print(normalized_image)

在这个案例中,我们使用了 NumPy 的数组运算和广播功能,将图像中的所有像素值归一化到 0 到 1 之间。这在图像处理中是一个常见的预处理步骤。

总结

本文介绍了 NumPy 的 12 个核心功能,包括创建数组、数组的形状和大小、数组的重塑、索引和切片、数组的运算、布尔索引、排序、统计函数、广播、合并和拆分、随机数生成以及线性代数运算。通过这些功能,你可以在科学计算中更加高效地处理数据。

责任编辑:赵宁宁 来源: 手把手PythonAI编程
相关推荐

2022-04-12 08:09:22

Nodejs前端面试题

2024-10-29 16:06:27

2023-08-04 14:31:43

Python核心项目

2009-11-18 13:11:29

PHP核心

2010-01-27 17:38:58

Windows Emb

2024-02-29 07:48:55

Python编程语言上下文管理器

2020-12-14 16:35:51

物联网万物互联智能制造

2010-02-07 14:16:57

2024-04-23 00:00:00

SpringBoot监听器

2010-04-07 09:31:06

2023-03-01 08:15:10

NginxNacos

2023-10-10 14:56:27

物联网智能建筑智能楼宇

2011-05-26 17:19:05

中间件

2010-09-22 15:31:05

OracleSPARCSolaris

2013-02-28 14:52:29

VMware

2011-03-07 09:55:56

2023-02-23 08:15:33

Spring异常处理机制

2019-08-15 10:29:35

物联网卡物联网平台

2024-03-07 10:40:41

点赞
收藏

51CTO技术栈公众号