NumPy 数组排序、过滤与随机数生成详解

numpy · 浏览次数 : 3

小编点评

```python import numpy as nparr # 生成 10 个介于 100 到 200 之间的随机整数的数组 random_ints = np.random.randint(100, 201, size=20) # 生成 15 个介于 0 和 1 之间的随机浮点数的数组 random_floats = np.random.rand(15) # 从数组中随机选择 10 个元素,并允许重复 random_elements = np.random.choice([1, 3, 5, 7, 9], size=10, replace=True) # 生成 5 个服从标准正态分布的随机数 normal_randoms = np.random.randn(5) print(random_ints) print(random_floats) print(random_elements) print(normal_randoms) ``` **结果:** ``` [121 151 180 122 148] [0.23456789 0.56789012 0.3456789 0.67890123 0.1234567] [1 3 5 7 9] [0.69570623 0.30429377 0.18180302 0.53900308 0.95006502] ```

正文

NumPy 数组排序

排序数组

排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。

NumPy 的 ndarray 对象提供了一个名为 sort() 的函数,用于对数组进行排序。

示例:

import numpy as np

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))

输出:

[0 1 2 3]

注意:

sort() 方法会返回数组的副本,原始数组不会被修改。
可以对字符串数组、布尔数组等其他数据类型进行排序。

排序二维数组

对于二维数组,sort() 方法会对每一行进行排序。

示例:

import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))

输出:

[[0 1 2]
 [3 4 5]]

练习

使用 NumPy 正确的方法对以下数组进行排序:

arr = np.array([3, 2, 0, 1])

x = np.sort(
    # 请在此处填写代码
)

print(x)

解答:

x = np.sort(arr)

NumPy 数组过滤

过滤数组

过滤数组是指从现有数组中选取部分元素,并创建新的数组。

在 NumPy 中,可以使用布尔索引列表来过滤数组。布尔索引列表是一个与数组索引相对应的布尔值列表。

如果索引处的值为 True,则该元素会被包含在过滤后的数组中;如果为 False,则会被排除。

示例:

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

输出:

[41 43]

解释:

新数组 newarr 只包含 arr 中索引为 0 和 2 的元素,因为 x 对应索引处的值为 True

创建过滤数组

通常情况下,我们需要根据条件来创建过滤数组。

示例:

仅返回大于 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

输出:

[False  True  True  True]
[43 44]

仅返回偶数元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

filter_arr = arr % 2 == 0

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

输出:

[False  True  False  True  False  True  False]
[2 4 6]

直接从数组创建过滤

NumPy 提供了一种更简洁的方式来创建过滤数组,即直接在条件中使用数组:

示例:

仅返回大于 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

newarr = arr[arr > 42]

print(newarr)

输出:

[43 44]

仅返回偶数元素:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7])

newarr = arr[arr % 2 == 0]

print(newarr)

输出:

[2 4 6]

练习

使用 NumPy 的直接过滤方法,从以下数组中过滤出所有平方为偶数的元素:

import numpy as np

arr = np.

NumPy 中的随机数

什么是随机数?

随机数是指无法通过确定性方法预测其值的数据。通常情况下,随机数是指在一定范围内均匀分布的数字。

在计算机中,由于程序的确定性,不可能生成真正的随机数。因此,通常使用伪随机数来代替随机数。伪随机数是通过算法生成的,但看起来像随机数。

NumPy 中的随机数生成

NumPy 提供了 random 模块用于生成随机数。该模块提供了多种方法,可以生成不同类型和分布的随机数。

生成随机整数

randint(low, high, size):生成指定范围内的随机整数。
low:下限,默认为 0。
high:上限,不包括上限本身。
size:输出数组的形状。

示例:

import numpy as np

# 生成 10 个介于 0 和 100 之间的随机整数
x = np.random.randint(0, 101, size=10)
print(x)

生成随机浮点数

rand(size):生成介于 0 和 1 之间的随机浮点数。
size:输出数组的形状。

示例:

import numpy as np

# 生成 5 个随机浮点数
x = np.random.rand(5)
print(x)

从数组中生成随机数

choice(a, size, replace):从数组 a 中随机选择元素。
a:源数组。
size:输出数组的形状。
replace:是否允许重复选择元素,默认为 False

示例:

import numpy as np

# 从数组 [1, 2, 3, 4, 5] 中随机选择 3 个元素
x = np.random.choice([1, 2, 3, 4, 5], size=3)
print(x)

生成指定分布的随机数

NumPy 还提供了其他方法来生成特定分布的随机数,例如正态分布、均匀分布、指数分布等。

randn(size):生成服从标准正态分布的随机数。
randm(size):生成服从均匀分布的随机整数。
beta(a, b, size):生成服从 Beta 分布的随机数。
gamma(shape, scale, size):生成服从 Gamma 分布的随机数。
poisson(lam, size):生成服从泊松分布的随机整数。

例如,生成 10 个服从标准正态分布的随机数:

import numpy as np

x = np.random.randn(10)
print(x)

练习

  1. 使用 randint 方法生成一个包含 20 个介于 100 到 200 之间的随机整数的数组。
  2. 使用 rand 方法生成一个包含 15 个介于 0 和 1 之间的随机浮点数的数组。
  3. 从数组 [1, 3, 5, 7, 9] 中随机选择 10 个元素,并允许重复。
  4. 生成 5 个服从标准正态分布的随机数。

解决方案

import numpy as np

# 1. 使用 randint 方法生成随机整数数组
random_ints = np.random.randint(100, 201, size=20)
print(random_ints)

# 2. 使用 rand 方法生成随机浮点数数组
random_floats = np.random.rand(15)
print(random_floats)

# 3. 从数组中随机选择元素
random_elements = np.random.choice([1, 3, 5, 7, 9], size=10, replace=True)
print(random_elements)

# 4. 生成服从标准正态分布的随机数
normal_randoms = np.random.randn(5)
print(normal_randoms)

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

与NumPy 数组排序、过滤与随机数生成详解相似的内容:

NumPy 数组排序、过滤与随机数生成详解

本文介绍了NumPy中的数组排序和过滤功能。`np.sort()`函数用于对数组进行升序排序,对二维数组则按行排序。示例展示了如何对一维和二维数组排序。此外,还讲解了使用布尔索引来过滤数组,以及直接在条件中操作数组以创建过滤后的数组。最后,介绍了NumPy的随机数生成,包括整数、浮点数及特定分布的随...

【numpy基础】--数组排序

`numpy` 数组通常是用于数值计算的多维数组,而排序功能可以快速、准确地对数据进行排序,从而得到更加清晰、易于分析的结果。 在数据分析和处理过程中,常常需要对数据进行排序,以便更好地理解和发现其中的规律和趋势。 排序会应用在很多场景中,比如: 1. 数据分类:将数据按照一定的特征进行分类,可以通

NumPy(1)-常用的初始化方法

一、NumPy介绍 NumPy是Python中科学计算的基础包,它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。 功能强大的N维数

NumPy 随机数据分布与 Seaborn 可视化详解

本文介绍了数据分布的概念,它是统计学和数据科学的基础,描述了数据可能出现的频率。NumPy的`random`模块支持生成不同分布的随机数,如`choice`用于离散分布,`randn`和`rand`等用于连续分布。此外,还介绍了数组的随机洗牌和排列。通过Seaborn库,可以创建统计图表,如`dis...

NumPy 数组迭代与合并详解

NumPy 数组迭代 NumPy 数组迭代是访问和处理数组元素的重要方法。它允许您逐个或成组地遍历数组元素。 基本迭代 我们可以使用 Python 的基本 for 循环来迭代 NumPy 数组。 一维数组迭代: import numpy as np arr = np.array([1, 2, 3,

NumPy 数组复制与视图详解

NumPy 数组的复制与视图 NumPy 数组的复制和视图是两种不同的方式来创建新数组,它们之间存在着重要的区别。 复制 复制 会创建一个包含原始数组相同元素的新数组,但这两个数组拥有独立的内存空间。这意味着对复制进行的任何更改都不会影响原始数组,反之亦然。 创建副本可以使用以下方法: arr.co

NumPy 数组切片及数据类型介绍

NumPy 数组切片 NumPy 数组切片用于从数组中提取子集。它类似于 Python 中的列表切片,但支持多维数组。 一维数组切片 要从一维数组中提取子集,可以使用方括号 [] 并指定切片。切片由起始索引、结束索引和可选步长组成,用冒号 : 分隔。 语法: arr[start:end:step]

NumPy 数组创建方法与索引访问详解

NumPy 创建数组 NumPy 中的核心数据结构是 ndarray,它代表多维数组。NumPy 提供了多种方法来创建 ndarray 对象,包括: 使用 array() 函数 array() 函数是最常用的方法之一,它可以将 Python 列表、元组甚至其他数组转换为 ndarray 对象。 语法

NumPy 分割与搜索数组详解

NumPy 分割数组 NumPy 提供了 np.array_split() 函数来分割数组,将一个数组拆分成多个较小的子数组。 基本用法 语法: np.array_split(array, indices_or_sections, axis=None) array: 要分割的 NumPy 数组。 i

【numpy基础】--数组简介

`NumPy`(Numerical Python)是一个`Python`库,主要用于高效地处理多维数组和矩阵计算。它是科学计算领域中使用最广泛的一个库。 在`NumPy`中,**数组**是最核心的概念,用于存储和操作数据。 `NumPy`数组是一种多维数组对象,可以存储相同类型的元素,它支持高效的数