浅述python中NumPy包

NumPy(Numerical Python)是Python的一种开源的数值计算扩展,提供了多维数组对象ndarray,是一个快速、灵活的大数据容器,可以用来存储和处理大型矩阵,支持大量的维度数组与矩阵运算,并针对数组运算提供大量的数学函数库。这些函数可以直接在数组和矩阵上操作,大大简化了数据处理和分析的复杂度。

NumPy数组的元素类型必须相同,具有同质性,以提高元素查找效率。同时,NumPy数组的元素可以通过基于0的下标单独访问。NumPy数组还通过dtype和shape属性表示元素的类型和维度,其中维度的类型是元组,按照从高到低的顺序来排列每一维的大小。

NumPy的优点在于其提供了大量数值计算的函数,能够进行线性代数的相关操作,并且由于其底层用C编写,因此执行效率非常高。这使得NumPy在科学计算、数据分析、机器学习、深度学习以及人工智能等领域有着广泛的应用。

安装NumPy的方法有多种,包括使用pip、conda或者从源码进行安装。在命令行中输入pip install numpy即可从Python官方的包索引中下载和安装最新版的NumPy。如果需要安装特定版本的NumPy,可以在命令中指定版本号,例如pip install numpy==1.19.3将安装NumPy的1.19.3版本。

简单举例:

以下是一些NumPy的简单使用例子:

  1. 创建数组

使用np.array()函数可以直接创建一个NumPy数组。

import numpy as np
# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1) # 输出: [1 2 3 4 5]
# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
# 输出:
# [[1 2 3]
# [4 5 6]
# [7 8 9]]

2.基本数学运算

NumPy支持对数组进行基本的数学运算,如加法、减法、乘法、除法等。

# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 数组加法
c = a + b
print(c) # 输出: [5 7 9]
# 数组乘法
d = a * b
print(d) # 输出: [ 4 10 18]

3.索引和切片

可以使用索引和切片来访问和修改数组中的元素。

# 使用索引访问数组元素
element = arr2[0, 1] # 访问第一行第二列的元素
print(element) # 输出: 2
# 使用切片访问数组的子集
subset = arr2[:2, 1:] # 访问前两行,从第二列开始到最后的所有列
print(subset)
# 输出:
# [[2 3]
# [5 6]]

4.创建特殊数组

NumPy提供了创建特殊类型数组的函数,如零数组、一数组、等差数组等。

# 创建零数组
zeros_arr = np.zeros((3, 3))
print(zeros_arr)
# 输出:
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
# 创建一数组
ones_arr = np.ones((2, 2), dtype=np.int)
print(ones_arr)
# 输出:
# [[1 1]
# [1 1]]
# 创建等差数组
linspace_arr = np.linspace(0, 10, 5) # 从0到10,生成5个数
print(linspace_arr) # 输出: [ 0. 2.5 5. 7.5 10. ]

NumPy作为Python中科学计算的基础包,功能丰富且强大,除了上述的基本功能外,还有许多其他高级功能。以下是一些NumPy的高级功能示例:

1.数组重塑
NumPy提供了reshape方法,允许用户改变数组的形状而不改变其数据。例如,你可以将一个一维数组重塑为二维数组,或者将一个二维数组重塑为三维数组等。

import numpy as np
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b)
# 输出:
# [[1 2 3]
# [4 5 6]]

2.数组合并
使用np.concatenate函数,你可以沿着指定的轴将多个数组合并成一个数组。

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.concatenate((a, b))
print(c)
# 输出: [1 2 3 4 5 6]

3.布尔索引
通过布尔索引,你可以基于条件选择数组中的元素

arr = np.array([1, 2, 3, 4, 5])
filtered_arr = arr[arr > 3]
print(filtered_arr)
# 输出: [4 5]

4.花式索引
花式索引允许你使用整数数组来索引数组中的元素。这可以用于选择非连续的元素或进行复杂的切片操作。

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
selected_elements = arr[[0, 1, 2], [0, 1, 2]]#在NumPy中,使用两个整数数组进行索引时,第一个数组指定了行索引,第二个数组指定了列索引。这种方式被称为“花式索引”或“高级索引”。
print(selected_elements)
# 输出: [1 5 9] 这里的 arr[[0, 1, 2], [0, 1, 2]] 实际上选择的是 (0, 0)(1, 1), 和 (2, 2) 这三个位置的元素,即对角线元素。

5.线性代数运算
NumPy提供了许多线性代数函数,如矩阵乘法、矩阵转置、求解线性方程组、计算特征值和特征向量等。

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B) # 矩阵乘法
print(C)
# 输出:
# [[19 22]
# [43 50]]

6.随机数生成
NumPy提供了多种随机数生成函数,可以用于生成均匀分布、正态分布等不同分布的随机数。

# 生成0到1之间的随机浮点数
random_float = np.random.rand()
print(random_float)
# 生成形状为(3, 3)的随机数矩阵 也是01之间的数
random_matrix = np.random.rand(3, 3)
print(random_matrix)

如果随机数矩阵不在0到1之间,而是具有其他范围或分布,NumPy提供了多种函数来满足这些需求。以下是一些常用的方法:

  1. 指定范围:使用np.random.uniform函数可以指定随机数的下限和上限。
import numpy as np
# 生成形状为(3, 3)的随机数矩阵,元素范围在a和b之间
a, b = 5, 10 # 指定范围
random_matrix = np.random.uniform(a, b, size=(3, 3))
print("随机数矩阵:\n", random_matrix)

2.整数随机数:使用np.random.randint函数可以生成指定范围内的整数随机数。

import numpy as np
# 生成形状为(3, 3)的整数随机矩阵,元素范围在low和high之间(包括low,不包括high)
low, high = 5, 10 # 指定范围
random_matrix = np.random.randint(low, high, size=(3, 3))
print("整数随机数矩阵:\n", random_matrix)

3.正态分布:使用np.random.randnnp.random.normal函数可以生成符合正态分布的随机数。

import numpy as np
# 生成形状为(3, 3)的正态分布随机数矩阵,均值为mu,标准差为sigma
mu, sigma = 0, 1 # 均值和标准差
random_matrix = np.random.normal(mu, sigma, size=(3, 3))
print("正态分布随机数矩阵:\n", random_matrix)

3.其他分布:NumPy还提供了其他分布,如指数分布(np.random.exponential)、泊松分布(np.random.poisson)等,您可以根据需要选择合适的函数。

请注意,上述函数中的size参数用于指定输出数组的形状。如果您想生成一个3x3的矩阵,就应该将size设置为(3, 3)。此外,还可以通过调整分布的参数(如均值、标准差、范围等)来控制随机数的特性。

这些只是NumPy功能的冰山一角。NumPy还提供了大量的数学函数、统计函数、线性代数函数等,可以方便地处理各种数值计算任务。无论是数据科学、机器学习还是科学计算,NumPy都是一个非常强大的工具。

总的来说,NumPy是一个强大且灵活的工具,对于需要进行数值计算和数据处理的任务来说,它是一个不可或缺的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json-c库交叉编译时报错

json-c库交叉编译时报错 关注点错误出现的场景错误描述解决办法为啥?原因分析解决步骤总结 怎么看出来的?哦!get新知识 关注点 看文章前,我先告诉你重点,给我死死盯准文章里的EM: 3 !!!!!!!&…

[leetcode] 705. 设计哈希集合

不使用任何内建的哈希表库设计一个哈希集合(HashSet)。 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key 。 bool contains(key) 返回哈希集合中是否存在这个值 key 。 void remove(key) 将给定值 key 从哈希集合中删除。如果哈希…

WebKit的使用技巧

WebKit是一个开源的浏览器引擎,广泛应用于多种浏览器和应用程序中,用于渲染网页和处理用户界面。在使用WebKit时,有一些技巧和注意事项可以帮助开发者更高效地利用这个强大的工具。 1. 理解WebKit的架构:WebKit由多个模块组成&am…

数据可视化高级技术Echarts(堆叠柱状图)

目录 一.如何实现 二.代码展示 1.stack名称相同(直接堆叠) 2. stack名称不相同(相同的堆叠,不同的新生成一列) 一.如何实现 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。即在series中…

【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL

前言 本文主要讲述MySQL中4中SQL语言的使用及各自特点。 SQL语言总共分四类:DDL、DML、DQL、DCL。 SQL-DDL | Data Definition Language 数据定义语言:用来定义/更改数据库对象(数据库、表、字段) 用途 | 操作数据库 # 查询所…

LeetCode 128.最长连续数列

目录 题目描述 方法一 思路: 代码: 方法二 思路: 代码: 题目描述 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n)…

playwright: context添加了“has_touch“:True的值导致页面点击事件失效

问题 录制脚本的时候页面上的可以点击,然后debug的时候不可点击,经过排查发现是在创建context时,browser.new_context()中添加了"has_touch":True,导致pc版本的web部分点击事件失效 解决方法 "has_touch"的…

SMS垃圾短信识别项目

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 项目背景 随着数字通信的快速发展,垃圾短信成为了一个普遍而烦人的问题。这些不请自来的消息不仅打扰了我们的日常生活,…

从零全面认识 多线程

目录 1.基本概念 2.创建线程方式 2.1直接建立线程 2.2实现Runnable接口 3.3实现Callable接口 3.4 了解Future接口 Future模式主要角色及其作用 3.5实例化FutureTask类 3.实现线程安全 3.1定义 3.2不安全原因 3.3解决方案 3.4volatile与synchronized区别 3.5Lock与…

【Linux】命名管道的创建方法基于命名管道的两个进程通信的实现

一、匿名管道和命名管道的区别 匿名管道由pipe函数创建并打开。 命名管道由mkfifo函数创建,打开用open FIFO(命名管道)与pipe(匿名管道)之间唯一的区别在它们创建与打开的方式不同,一但这些工作完成之后&am…

创建线程池的例子

public class ExecutorTest {public static void main(String[] args) {//创建线程池的5种方式: // Executors.newFixedThreadPool();//创建固定线程数的线程池 // Executors.newSingleThreadExecutor();//创建单线程的线程池 // Executors.ne…

Geeker-Admin:基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架

Geeker-Admin:基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架 一、引言 随着技术的不断发展,前端开发领域也在不断演变。为了满足现代应用程序的需求,开发人员需要使用最新、最强大的工具和技术。Geeker-Admin正是…

如何安全地设置MySQL数据库的IP白名单

设置MySQL数据库的IP白名单是一种关键的安全措施,可以确保只有来自特定IP地址的请求被允许访问数据库服务器。这里是如何安全地配置这些设置的分步指南。 步骤1: 登录到MySQL服务器 首先,使用管理员权限登录到你的MySQL服务器。如果你使用的是命令行&a…

activiti初次学习

源代码地址:https://gitee.com/ZSXYX/activiti.git​ 1、安装插件 首先安装下图所示activiti,不确定是哪个插件有用的,有时间可排除下 在resources下创建一个文件夹:processes,右键,新建 生成: 选中act.bpmn20.xm…

【C++】模拟list

list的模拟真的很震撼,第一次学习时给我幼小的心灵留下了极大地冲击 接下来我们一起看看list模拟究竟是怎样一回事 目录 节点的封装:list类的实现:私有成员变量:构造函数:push_back && pop_back: 迭代器类的实…

基于ICEEMDAN-SVD的信号去噪算法

一、代码原理 ICEEMDAN-SVD算法是一种结合了Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise (ICEEMDAN) 和奇异值分解 (SVD) 的信号去噪方法。这种算法结合了两种先进的信号处理技术,旨在提高信号去噪的效果。以下是该算法的基本原…

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏,又增加了哔哩哔哩搜索和必应搜索

第24次修改了可删除可持久保存的前端html备忘录:文本编辑框不再隐藏&#xff0c;又增加了哔哩哔哩搜索和必应搜索. <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"…

shell-将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

应用场景&#xff1a;防止恶意IP尝试ssh登录 脚本说明&#xff1a;将密码输入错误超过四次得ip地址通过iptable防火墙访问。 分析&#xff1a; 首先&#xff0c;需要知道ssh远程访问记录在哪一个文件中 /var/log/secure 其次&#xff0c;模拟远程访问输错密码&#xff0c;查…

Vulnhub靶机 DC-1渗透详细过程

Vulnhub靶机:DC-1渗透详细过程 目录 Vulnhub靶机:DC-1渗透详细过程一、将靶机导入到虚拟机当中二、攻击方式主机发现端口扫描web渗透利用msf反弹shell数据库信息web管理员密码提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.com/entry/dc-1-1,29…

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…