首页 > 其他分享 >NumPy 数组排序、过滤与随机数生成详解

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

时间:2024-05-20 20:30:49浏览次数:10  
标签:arr 随机数 生成 print 详解 数组 np NumPy

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,关注后即可获取最新文章推送

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

标签:arr,随机数,生成,print,详解,数组,np,NumPy
From: https://www.cnblogs.com/xiaowange/p/18202735

相关文章

  • 详解智慧路灯杆LED屏在不同场景中的应用
    伴随城市公共设施的智能化升级步伐,智慧路灯杆也不断成为了城市管理与服务的重要组成部分。智慧路灯杆集成了智慧照明、智能监控、环境监测、LED灯杆屏、一键告警、便捷充电等设备,不仅提供基本照明功能,还实现包括安防管理、交通疏导、广告宣传等多重功能,极大地提高了城市管理的智能......
  • OC渲染农场的收费方式详解!
    OC渲染器是动画和设计师常用的高效渲染工具,能够实现超写实的画面效果。然而,由于OC渲染器依赖GPU硬件进行渲染,对本地电脑的配置要求较高,许多用户选择使用渲染农场。本文详细讲解渲染农场的收费方式,帮助大家解如何在降低成本的同时高效完成渲染任务。渲染农场通常支持OC渲染器,许多......
  • C# LINQ和Lambda表达式详解
    (1)简单的查询语句Linq语法:vardata=fromaindb.Areasselecta;Lamda语法:vardata=db.Areas;sql语法: string sqlStr="SELECT*FROMAreas";(2)简单的WHERE语句Linq语法:vardata=fromaindb.orderInfowherea.orderId> 20 selecta;Lamda语法:vardata=db.......
  • 保姆教程系列:Git 实用命令详解
    !!!是的没错,胖友们,保姆教程系列又更新了!!!@目录前言1.将本地项目推送到远程仓库2.IdeaGit回退到某个历史版本3.修改项目关联远程地址方法4.Git修改分支的名称5.Git删除分支6.master分支代码复制到新的分支7.Git迁移项目到其他代码仓库,且保留分支与提交记录8.Git相关命令操作......
  • 深入解析xLSTM:LSTM架构的演进及PyTorch代码实现详解
    xLSTM的新闻大家可能前几天都已经看过了,原作者提出更强的xLSTM,可以将LSTM扩展到数十亿参数规模,我们今天就来将其与原始的lstm进行一个详细的对比,然后再使用Pytorch实现一个简单的xLSTM。xLSTMxLSTM是对传统LSTM的一种扩展,它通过引入新的门控机制和记忆结构来改进LSTM,旨在提......
  • CSS的Flexbox布局示例详解
    CSSFlexibleBoxModule(简称Flexbox)是一种现代化的布局模式,用于创建响应式的一维布局(无论是水平还是垂直)。它提供了对项目的对齐、方向、排序、尺寸调整等方面的强大控制。下面是对Flexbox布局的一些关键概念和示例代码:一、关键概念FlexContainer(弹性容器):需要添加display:f......
  • MQTT详解以及实际操作
    目录1MQTT1.1MQTT介绍1.1.1简介1.1.2特点和应用1.1.3为什么要用MQTT协议1.2MQTT控制报文的结构1.2.1固定报文头(FixedHeader)1.2.2可变报文头(VariableHeader)1.2.3有效负荷和消息类型1.2.4消息质量(QoS)1.4搭建MQTT服务1.5SpringBoot搭建提供端1.5.1pom.xml1.5.2修改......
  • 任意文件上传漏洞详解
    当文件上传接口可以上传任意文件,但是不解析,文件上传后的路径可控。这种情况下有两种方法1、上传.htaccess和.user.ini配置文件。2、当知道网站根路径的情况下,可以上传到其他目录下。3、当不知道网站根路径的情况下,可以通过上传计划任务的方式实现命令执行。文件上传漏洞的定义文......
  • VirtualBox虚拟机远程桌面连接设置详解(包含登录密码设置)
    一、安装VirtualBox虚拟机下载与安装:访问VirtualBox官方网站,根据您的操作系统(如Linux、Windows、Mac等)下载对应版本的VirtualBox安装包。安装下载的VirtualBox软件。创建虚拟机:打开VirtualBox,点击“新建”按钮,按照向导创建新的虚拟机。例如,命名为“Winxp”。根据您的......
  • C 语言中的 sscanf 详解
    一、函数介绍函数原型:intsscanf(constchar*str,constchar*format,...);返回值:成功返回匹配成功的模式个数,失败返回-1。RETURNVALUEThesefunctionsreturnthenumberofinputitemssuccessfullymatchedandassigned,whichcanbefewerthanprovi......