详细介绍numpy在python中的用法

news2024/10/9 5:25:54

NumPy 是 Python 科学计算库中非常重要的库,主要用于处理大型多维数组和矩阵运算。它提供了大量数学函数来操作这些数组。NumPy 的核心是 ndarray 对象,该对象是一个多维数组,可以存储同类型的数据。

下面是 NumPy 的详细用法和功能介绍:

1. 导入NumPy

在使用 NumPy 之前,需要先导入库,通常我们会将 NumPynp 作为别名:

import numpy as np

2. 创建数组

NumPy 中的数组称为 ndarray,可以通过多种方式创建数组:

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

# 创建多维数组
arr_2d = np.array([[1, 2], [3, 4]])
print(arr_2d)  # 输出: [[1 2] [3 4]]
b) 使用 zeros()ones()full() 创建特定值数组
# 创建一个全为0的数组
zeros_arr = np.zeros((2, 3))
print(zeros_arr)  # 输出:[[0. 0. 0.] [0. 0. 0.]]

# 创建一个全为1的数组
ones_arr = np.ones((2, 3))
print(ones_arr)  # 输出:[[1. 1. 1.] [1. 1. 1.]]

# 创建一个指定数值的数组
full_arr = np.full((2, 2), 5)
print(full_arr)  # 输出:[[5 5] [5 5]]
c) 使用 arange()linspace() 创建序列数组
# 创建一个等差序列数组
arr_range = np.arange(0, 10, 2)
print(arr_range)  # 输出:[0 2 4 6 8]

# 创建一个线性间隔数组
arr_linspace = np.linspace(0, 1, 5)
print(arr_linspace)  # 输出:[0.   0.25 0.5  0.75 1.  ]

3. 数组属性

ndarray 对象具有多种属性,可以获取数组的信息:

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

print(arr.shape)  # 数组的形状 (2, 3)
print(arr.size)   # 数组中的元素数量 6
print(arr.ndim)   # 数组的维度 2
print(arr.dtype)  # 数组元素的数据类型 int64

4. 数组索引和切片

NumPy 数组支持多维索引和切片操作。

a) 一维数组索引
arr = np.array([1, 2, 3, 4, 5])
print(arr[0])   # 输出第一个元素:1
print(arr[-1])  # 输出最后一个元素:5
b) 多维数组索引
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d[0, 2])  # 输出第一行第三列的元素:3
print(arr_2d[1, -1]) # 输出第二行最后一个元素:6
c) 切片
# 一维数组切片
arr = np.array([1, 2, 3, 4, 5])
print(arr[1:4])  # 输出: [2 3 4]

# 多维数组切片
arr_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr_2d[0:2, 1:3])  # 输出:[[2 3] [5 6]]

5. 数学运算

NumPy 可以对数组进行广播机制下的运算。

a) 数组的基本运算
arr = np.array([1, 2, 3])

print(arr + 2)  # 输出:[3 4 5]
print(arr * 3)  # 输出:[3 6 9]
print(arr ** 2) # 输出:[1 4 9]
b) 数组之间的运算
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

print(arr1 + arr2)  # 输出:[5 7 9]
print(arr1 * arr2)  # 输出:[4 10 18]
c) 通用函数 (Universal Functions)

NumPy 提供了许多通用的数学函数,可以应用于数组的每个元素,例如 sin()exp()sqrt() 等。

arr = np.array([1, 2, 3])
print(np.sin(arr))  # 输出:数组每个元素的正弦值
print(np.exp(arr))  # 输出:数组每个元素的指数值
print(np.sqrt(arr)) # 输出:数组每个元素的平方根

6. 数组的形状操作

NumPy 提供了许多工具来改变数组的形状。

a) reshape() 改变数组形状
arr = np.array([[1, 2, 3], [4, 5, 6]])
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# 输出:
# [[1 2]
#  [3 4]
#  [5 6]]
b) 数组转置
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.T)
# 输出:
# [[1 4]
#  [2 5]
#  [3 6]]

7. 数组的合并和分割

NumPy 支持对数组的合并和分割操作。

a) 数组的合并
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6]])

# 垂直合并
vstack_arr = np.vstack((arr1, arr2))
print(vstack_arr)  # 输出:[[1 2] [3 4] [5 6]]

# 水平合并
hstack_arr = np.hstack((arr1, arr2.T))
print(hstack_arr)  # 输出:[[1 2 5] [3 4 6]]
b) 数组的分割
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 垂直分割
vsplit_arr = np.vsplit(arr, 2)
print(vsplit_arr)  # 输出两个2x3的数组

# 水平分割
hsplit_arr = np.hsplit(arr, 3)
print(hsplit_arr)  # 输出三个2x1的数组

8. 布尔索引和条件过滤

NumPy 支持布尔条件筛选和索引操作。

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

# 条件赋值
arr[arr > 3] = 0
print(arr)  # 输出:[1 2 3 0 0]

9. 常用的统计函数

NumPy 提供了丰富的统计函数,方便对数组进行统计计算。

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

print(np.mean(arr))  # 平均值:3.0
print(np.sum(arr))   # 总和:15
print(np.std(arr))   # 标准差:1.414
print(np.min(arr))   # 最小值:1
print(np.max(arr))   # 最大值:5

10. 随机数生成

NumPyrandom 模块提供了生成随机数的功能。

# 生成一个[0, 1)之间的随机浮点数
print(np.random.rand())

# 生成一个服从标准正态分布的随机数
print(np.random.randn())

# 生成一个指定范围内的随机整数
print(np.random.randint(0, 10, (3, 3)))  # 输出一个3x3的随机整数矩阵

11. 广播机制

NumPy 具有广播(broadcasting)机制,允许在不同形状的数组之间执行算术运算。

arr

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

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

相关文章

谢希仁计算机网络 (四)—— 网络层

计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务 计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务_以下属于网络层范…

基于PHP+uniapp的民宿预订系统的微信小程序设计与实现 ea9i3

目录 项目介绍技术栈和环境说明具体实现截图php技术介绍文件解析微信开发者工具HBuilderXuniapp开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 项目介绍 总体上看,Android的民宿预订系统…

企业安全运行与维护(Enterprise Security Operation and Maintenance)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

.locked勒索病毒:数据安全的新威胁

导言 在数字时代,数据已成为企业和个人的核心资产,其价值无可估量。然而,随着网络技术的飞速发展,一种名为“.locked勒索病毒”的恶意软件悄然兴起,对全球范围内的数据安全构成了严重威胁。这种病毒以其独特的加密方式…

【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分

收录于我的专栏:AI修炼之路 第1部分:【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分 二、RAG概览 RAG研究范式不断演变,可以为三个阶段:原始RAG、进阶RAG和模块化RAG。 2.1 原始RAG Naive RAG&#xf…

Spring Boot快速入门:HelloWorld示例

Spring Boot是一个非常流行,受欢迎的框架,它不仅常用于构建传统的单体式MVC应用程序,同时也非常适合用于搭建微服务架构。对于 Web 应用程序,Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现…

QD1-P1 HTML、CSS与JS三者之间的关系

今天开始学习前端基础,新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程:【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up:遥遥温柔乡 在B站随便搜索了一个前端课程,共91节&am…

美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解

在运用畅联云平台进行视频汇聚与监控管理时,海康威视的安防摄像机凭借其卓越的性能与广泛的应用兼容性,成为了众多用户的首选产品。海康威视摄像机参数设置与调试对于实现高效的安防监控至关重要。今天,让我们一同深入学习海康摄像机的参数设…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

【万字长文】Word2Vec计算详解(三)

【万字长文】Word2Vec计算详解(三) 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解(一)markdown行 9000 【万字长文】Word2Vec计算详解(二)markdown行 12000 【万字长文…

数据结构与算法篇(刷题篇 - 树)

目录 1. 二叉树的前序遍历(简单) 1.1. 题目描述 1.2. 解题思路 方法一:递归(推荐使用) 方法二:非递归(扩展思路) 2. 二叉树的中序遍历(中等) 2.1. 题目…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中,突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢,因为在我使用DeepFilter的过程中,我发现对于一些低信噪比的信号来说,DeepFilter很容易出现过拟合现象,导致音源…

大数据毕业设计选题推荐-电影票房数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Linux云计算 |【第四阶段】RDBMS2-DAY1

主要内容: MySQL主从同步(概述、原理、构建主从同步)、主从同步结构类型(主多从、主从从、主主)、复制模式(异步、半同步)、启用半同步复制 一、MySQL主从同步 MySQL 主从同步(Mas…

工控风云 | 科东软件受邀参加2024 CCF工控“风云论坛”并做演讲

近日,CCF工业控制计算机专委会首届“风云论坛”在苏州CCF业务总部&学术交流中心成功召开。作为国内工业操作系统领军企业,科东软件受邀参加本次大会,并做“鸿道(Intewell)新型工业操作系统”主题演讲。 “要打好科技仪器设备、操作系统…

自动驾驶系列—超声波雷达技术详解:自动驾驶中的短距离感知利器

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

知识改变命运 数据结构【优先级队列(堆)】

优先级队列(堆) 1:堆概念2:堆的创建(以小根堆为例)3:堆的插入与删除3.1 堆的插入3.2堆的删除 4:oj练习5:堆排序6接口介绍(底层代码的查看)6.1常用三种构造方法 前言:队列…

Flutter-->Namespace not specified.

更新Android gradle 7.5.0之后, 运行项目会出现Namespace not specified.问题, 这里出一个我的解决方案. 由于很多库都不可能及时更新适配gradle 7.5.0, 所以可以等pub get将子库拉取到本地之后, 在本地手动添加namespace属性,即可解决本文问题. 作为程序猿,那肯定不可能手动修…

Elasticsearch、Kibana学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程:封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

鸿蒙--知乎评论

这里我们将采用组件化的思想进行开发 拆解组件 pages下,新建ZhiHu的文件pages下,新建components, 里面新建 HmNavBar和HmCommentItem components/HmNavBar.ets Entry Component struct HmNavBar {title: string 标题build() {Row() {// 返回键Row() {I…