【Numpy】02 高级技巧:数组操作与随机数生成

NumPy高级技巧:数组操作与随机数生成

简介

在本篇博客是基于NumPy基础入门:创建和管理多维数组之上,我们进一步探索NumPy的高级功能,包括数组的轴向操作和随机数生成。这些技巧将帮助您更深入地理解NumPy,并在数据处理中发挥重要作用。

数组的维度和轴向操作

NumPy中的数组可以有多个维度,每个维度称为一个轴(axis)。轴向操作允许我们沿着特定轴对数组进行计算,这在多维数据分析中非常有用。

想象一个二维数组,它就像是一个表格或者是一个矩阵。在这个矩阵中,你可以沿着行移动(横向),也可以沿着列移动(纵向)。在NumPy中,行和列分别对应于数组的两个轴:轴0和轴1。

轴的介绍

  • 轴0:通常代表数组的行。如果你在轴0上操作,比如求和,那么你是在沿着行方向进行操作,这将得到一个新的数组,其形状的轴0将会减少一个维度(因为所有的行被合并了)。
  • 轴1:通常代表数组的列。如果你在轴1上操作,比如求平均值,那么你是在沿着列方向进行操作,这将得到一个新的数组,其形状的轴1将会减少一个维度(因为所有的列被合并了)。

示例二维数组

让我们用一个更简单的二维数组来解释轴的概念。假设我们有一个二维数组 arr,形状为 (2, 3),表示有两行三列。这个数组可以表示为:

[
  [1, 2, 3],
  [4, 5, 6]
]

在这个二维数组中,我们同样有两个轴:

  • 轴0:代表行。沿着轴0进行操作,意味着我们在操作行。
  • 轴1:代表列。沿着轴1进行操作,意味着我们在操作列。

轴向操作示例

假设我们有一个二维数组arr,我们可以使用arr.shape来查看数组的形状,这将告诉我们数组的维度和每个轴的长度:

import numpy as np

# 创建一个2x3的二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
print("数组形状:", arr.shape)  # 输出:(2, 3),表示有2行3列

如果我们想对数组进行轴向操作,比如求和,我们可以使用np.sum()函数,并指定axis参数:

# 沿着axis=0求和,即对每一列进行求和
sum_axis_0 = np.sum(arr, axis=0)
print("axis=0求和结果:", sum_axis_0)  # 输出:[5 7 9],即列的和

# 沿着axis=1求和,即对每一行进行求和
sum_axis_1 = np.sum(arr, axis=1)
print("axis=1求和结果:", sum_axis_1)  # 输出:[ 6 15],即行的和
  • 沿着第一轴(轴0)求和:这将把两行合并,对每一列的元素进行求和。结果将是一个一维数组,长度为3,因为原来的数组有3列。

    np.sum(arr, axis=0)
    

    结果将是 [1+4, 2+5, 3+6],即 [5, 7, 9]

  • 沿着第二轴(轴1)求和:这将把每一行的元素进行求和。结果将是一个一维数组,长度为2,因为原来的数组有2行。

    np.sum(arr, axis=1)
    

    结果将是 [1+2+3, 4+5+6],即 [6, 15]

除了求和,NumPy还支持其他轴向操作,如平均值(np.mean())、最大值(np.max())、最小值(np.min())等。这些操作都可以指定axis参数来沿着特定的轴进行。

# 计算每一列的平均值
mean_axis_0 = np.mean(arr, axis=0)
print("axis=0平均值结果:", mean_axis_0)  # 输出:[2.5 3.5 4.5],即每列的平均值

# 计算每一行的最大值
max_axis_1 = np.max(arr, axis=1)
print("axis=1最大值结果:", max_axis_1)  # 输出:[3 6],即每行的最大值

轴向操作不仅限于二维数组,它们同样适用于更高维度的数组。例如,对于一个三维数组,你可以沿着第一个轴(axis 0)或第二个轴(axis 1)等进行操作。

# 创建一个3x2x2的三维数组
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]])
print("三维数组形状:", arr_3d.shape)  # 输出:(3, 2, 2),表示有3层,每层有2行2列

# 沿着第一个轴求和,结果是一个2x2的数组
sum_axis_0_3d = np.sum(arr_3d, axis=0)
print("axis=0求和结果(三维数组):\n", sum_axis_0_3d)
# 输出:
# [[15 18]
#  [21 24]]
# 表示对第一个轴(层)的每个元素求和

打印和显示数组

当数组元素数量过多时,NumPy会智能地显示数组的中间部分,只展示数组的四个角落的元素数据,以便于快速理解数组内容。

生成随机数数组

随机数在数据分析和机器学习中扮演着重要角色。NumPy提供了多种生成随机数的方法:

  • np.random.random(size):生成在[0, 1)区间内均匀分布的随机数。
  • np.random.rand(d0, d1, ..., dn):生成给定形状的数组,数组元素值在[0, 1)区间内。
  • np.random.randn(d0, d1, ..., dn):生成标准正态分布的随机数。
  • np.random.randint(low, high=None, size=None):生成指定范围内的随机整数。

设置随机数种子

为了确保随机数生成的可重复性,NumPy提供了np.random.seed(seed)函数,通过设置相同的种子值,可以在不同次运行中生成相同的随机数序列。

综合示例

让我们通过一些示例来演示如何使用这些高级功能:

# 设置随机数种子以保证结果可重现
np.random.seed(42)

# 生成形状为(3, 4)的[0, 1)区间的均匀分布随机数数组
random_array = np.random.random((3, 4))
print("生成的随机数组:\n", random_array)

# 生成形状为(2, 2)的标准正态分布随机数数组
normal_array = np.random.randn(2, 2)
print("生成的标准正态分布随机数组:\n", normal_array)

# 生成10个[1, 100)区间的随机整数
random_integers = np.random.randint(1, 100, 10)
print("生成的随机整数:", random_integers)

结论

通过本篇博客的学习,您应该已经掌握了NumPy的高级数组操作和随机数生成技巧。这些技巧对于进行更复杂的数据分析和科学计算至关重要。NumPy的高级功能不仅提高了数据处理的效率,还增加了我们对数据操作的灵活性和控制力。随着您对NumPy的不断深入,您将能够更加自如地应对各种数据处理挑战。

参考:

Numpy系列文章:NumPy基础入门:创建和管理多维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值