【Numpy】NumPy基础入门:创建和管理多维数组

NumPy基础入门:创建和管理多维数组

简介

NumPy(Numerical Python的简称)是Python语言的一个基础科学计算库,广泛应用于数据分析、机器学习、科学计算和工程领域。NumPy的核心是其强大的N维数组对象ndarray,它为Python提供了一种类似于C语言中数组的数据结构,但比Python原生的列表(list)更高效、功能更丰富。

NumPy数组不仅可以实现高效的数值存储,还能进行快速的数值计算。NumPy提供了大量的数学函数库,包括线性代数、傅里叶变换和随机数生成等,这些功能在数据处理和科学计算中非常实用。

NumPy的数组结构是多维的,这意味着它可以存储和操作一维向量、二维矩阵以及更高维度的数据集。NumPy的数组是同质的,即数组中的所有元素必须是相同的数据类型,这使得NumPy能够以高度优化的方式实现数组操作。

NumPy的性能优势主要来自于其底层使用C语言编写,以及对数组操作的高度优化。NumPy的数组操作通常比纯Python实现快得多,这是因为NumPy的数组操作是直接在内存上进行的,而不需要像Python列表那样进行大量的函数调用。

此外,NumPy还是许多其他科学计算和数据分析库的基础,如Pandas、SciPy、Matplotlib和TensorFlow等,这些库在处理复杂数学运算、数据清洗、可视化和机器学习等方面发挥着重要作用。

NumPy安装与导入

在开始使用NumPy之前,请确保已经安装了这个库。如果未安装,可以通过Python的包管理工具pip来安装:

pip install numpy

安装完成后,就可以在Python脚本中导入NumPy库,并习惯性地将其简写为np

import numpy as np
print(np.__version__)  # 输出NumPy版本信息,例如:1.18.5
N维数组类ndarray

ndarray是NumPy库中最基本的数据结构,它是一个多维数组,可以看作是一个具有额外属性(如形状、数据类型等)的固定类型数据的集合。ndarray对象支持广泛的算术运算,包括逐元素的加法、减法、乘法和除法等。

创建NumPy数组

创建NumPy数组非常简单,可以通过np.array函数将Python的列表或元组转换成NumPy数组。例如:

arr1 = np.array([1, 2, 3, 4, 5])  # 创建一维数组
print(arr1)  # 输出:[1 2 3 4 5]
arr2 = np.array([[1, 2, 3], [4, 5, 6]])  # 创建二维数组
print(arr2)  # 输出:# [[1 2 3]#  [4 5 6]]
NumPy数组属性

NumPy数组对象提供了若干属性,帮助我们更好地了解和操作数组:

  • ndim:数组的维数。
  • shape:数组的形状,表示为一个元组,如(3, 4)表示三行四列。
  • size:数组的总元素个数。
  • dtype:数组元素的数据类型。
  • itemsize:数组每个元素的大小(字节数)。

例如:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print('ndim:', arr.ndim)  # 输出数组的维数:2
print('shape:', arr.shape)  # 输出数组的形状:(2, 3)
print('size:', arr.size)  # 输出数组的总元素个数:6
print('dtype:', arr.dtype)  # 输出数组元素的数据类型:int64
print('itemsize:', arr.itemsize)  # 输出数组每个元素的大小:4(字节)
改变数组形状

reshape方法允许我们在不改变数据的情况下改变数组的形状。例如,将一维数组重塑为二维数组:

arr = np.arange(12)  # 创建0到11的一维数组
arr_reshaped = arr.reshape((4, 3))  # 将数组重塑为4行3列的二维数组
print(arr_reshaped)  # 输出:# [[ 0  1  2]#  [ 3  4  5]#  [ 6  7  8]#  [ 9 10 11]]
创建特定类型的数组

NumPy提供了一系列函数来创建特定类型的数组:

创建特定类型的数组

NumPy提供了多种函数,使得创建特定类型的数组变得简单快捷。以下是一些常用的数组创建函数及其示例。

np.arange

np.arange函数可以从指定的起始值start开始,到结束值stop之前结束(不包括stop),以给定的步长step进行递增。如果不指定step,默认步长为1。

# 使用arange创建0到11的一维数组
arr_arange = np.arange(12)
print(arr_arange)  # 输出:[ 0  1  2  3  4  5  6  7  8  9 10 11]
np.linspace

np.linspace函数在指定的起始值start和结束值stop之间创建num个元素的等差数列。默认情况下,endpoint参数为True,意味着包含结束值stop

# 使用linspace创建0到10之间的5个点的等差数列
arr_linspace = np.linspace(0, 10, 5)
print(arr_linspace)  # 输出:[0.  2.5 5.  7.5 10.]
np.logspace

np.logspace函数在对数尺度上创建等比数列,即10**start10**stop之间创建num个元素。这对于对数数据的表示非常有用。

# 使用logspace创建1到10000之间的5个点的等比数列
arr_logspace = np.logspace(1, 5, 5)
print(arr_logspace)  # 输出:[   10.    100.   1000.  10000. 100000.]
np.zeros

np.zeros函数创建一个指定形状shape的数组,并将所有元素初始化为0。

# 创建一个形状为3行4列的全0数组
arr_zeros = np.zeros((3, 4))
print(arr_zeros)  # 输出:# [[0. 0. 0. 0.]#  [0. 0. 0. 0.]#  [0. 0. 0. 0.]]
np.ones

np.ones函数创建一个指定形状shape的数组,并将所有元素初始化为1。

# 创建一个形状为2行2列的全1数组
arr_ones = np.ones((2, 2))
print(arr_ones)  # 输出:# [[1. 1.]#  [1. 1.]]
np.empty

np.empty函数创建一个指定形状shape的数组,数组的元素不会被初始化,因此内容是未定义的。

# 创建一个形状为3行2列的未初始化数组
arr_empty = np.empty((3, 2))
print(arr_empty)  # 输出:数组,内容是未定义的(可能是任意值)
np.eye

np.eye函数创建一个二维数组,其中对角线元素设置为1,其余元素为0。可选参数k表示对角线的位置。

# 创建一个3行3列的单位矩阵,对角线右移一个单位
arr_eye = np.eye(3, k=1)
print(arr_eye)  # 输出:# [[0. 1. 0.]#  [0. 0. 1.]#  [0. 0. 0.]]
np.diag

np.diag函数有两种用法:当输入为一维数组v时,它可以创建一个对角线元素为v的方阵;当输入为二维数组时,它可以提取或返回数组的主对角线元素。

# 使用diag从一维数组创建方阵
arr_diag = np.diag([1, 2, 3])
print(arr_diag)  # 输出:# [[1 0 0]#  [0 2 0]#  [0 0 3]]

通过这些函数,我们可以快速创建所需的数组类型,为数据分析和科学计算打下基础。

结论

本教程详细介绍了NumPy的基础知识,包括如何创建和管理多维数组。通过实际的例子,我们看到了如何利用NumPy的强大功能来简化数组操作。理解这些基础概念对于后续进行更高级的数值计算和数据分析至关重要。NumPy不仅提供了数组创建和管理的方法,还为科学计算和数据分析提供了坚实的基础。

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

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

相关文章

医疗图像处理2023:Transformers in medical imaging: A survey

医学成像中的transformer:综述 目录 一、介绍 贡献与安排 二、CNN和Transformer 1.CNN 2.ViT 三、Transformer应用于各个领域 1.图像分割 1)器官特异性 ①2D ②3D 2)多器官类别 ①纯transformer ②混合架构 单尺度 多尺度 3)…

fyne表单布局

fyne表单布局 layout.FormLayout就像一个 2 列网格布局 。 package mainimport ("image/color""fyne.io/fyne/v2/app""fyne.io/fyne/v2/canvas""fyne.io/fyne/v2/container""fyne.io/fyne/v2/layout" )func main() {myApp…

electron 如何升级版本

electron-updater使用指南 基础 检测是否最新版 autoUpdater.checkForUpdates() 下载最新版 autoUpdater.downloadUpdate() 项目使用 update.js const { ipcMain } require(electron) const { autoUpdater } require(electron-updater) const path require("pa…

Wpf 使用 Prism 实战开发Day27

首页汇总和数据动态显示 一.创建首页数据汇总数据接口 汇总:待办事项的总数已完成:待办事项里面有多少条完成的待办完成比例:已完成和汇总之间的比例备忘录:显示备忘录的总数待办事项:显示待办事项未完成的集合备忘录&…

②单细胞学习-组间及样本细胞比例分析

目录 数据读入 每个样本各细胞比例 两个组间细胞比例 亚组间细胞比例差异分析(循环) 单个细胞类型亚新间比例差异 ①单细胞学习-数据读取、降维和分群-CSDN博客 比较各个样本间的各类细胞比例或者亚组之间的细胞比例差异 ①数据读入 #各样本细胞…

三、Ollama导入大模型(.Net8+SemanticKernel+Ollama)本地运行自己的大模型

Ollama导入大模型 一、导入Ollama大模型1、使用run命令2、使用Modelfile方式 二、导入自定义大模型(Ollama官网以外的大模型)三、使用OpenWebUI导入大模型 Ollama可以导入官方提供的大模型,也可以导入huggingface上的自定义大模型&#xff08…

【加密与解密(第四版)】第十四章笔记

第十四章 漏洞分析技术 14.1 软件漏洞原理 缓冲区溢出漏洞:栈溢出 堆溢出、整型溢出(存储溢出、计算溢出、符号问题) UAF(Use-After-Free)漏洞 14.2 ShellCode 功能模块:下载执行、捆绑、反弹shell 14.3 …

【NumPy】使用NumPy计算相关系数:详解numpy.corrcoef函数及应用

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

MySQL之性能剖析(二)

MySQL之性能剖析 通过性能剖析进行优化 一旦掌握并时间面向响应时间的优化方法,就会发现需要不断地对系统进行性能剖析(profiling). 性能剖析是测量和分析时间花费在哪里的主要方法。性能剖析一般有两个步骤:测量任务所花费的时间;然后对结果进行统计和…

基础8 探索JAVA图形编程桌面:邮件操作组件详解

在一个静谧的午后,卧龙和凤雏相邀来到一家古朴典雅的茶馆。茶馆内环境清幽,袅袅的茶香与悠扬的古筝声交织在一起,营造出一种宁静而祥和的氛围。 卧龙和凤雏坐在茶馆的一角,面前的桌子上摆放着一套精致的茶具。茶香四溢&#xff0c…

C++ STL 中的自定义比较:深入理解相等和等价

STL 中的自定义比较、相等和等价 一、简介二、STL 的排序部分三、STL 的未排序部分四、比较元素五、实现比较器六、总结 一、简介 本文主要讨论了在 STL 中使用自定义比较函数&#xff0c;以及比较操作中的相等和等价概念。 有如下的代码&#xff1a; std::vector< std::…

HTML并集,交集,子代,后代选择器

1,交集选择器 他们必须满足既是p又是.box的关系&#xff08;直接连写&#xff0c;没有任何符号&#xff09; p.box{color:red; } <div class"box"> 1 </div> <p class"box">2</p> <p>3</p> 2.并集选择器 将div,p,…

【强化学习04】Q学习时序差分法

贝尔曼方程在强化学习中是用来更新Q值&#xff08;动作价值&#xff09;的一个重要工具。下面用小白能理解的方式解释贝尔曼方程是如何更新Q值的&#xff1a; 什么是Q值&#xff1f; 在强化学习中&#xff0c;Q值是用来评估在某个状态&#xff08;state&#xff09;下执行某个…

牛客题目进展

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 最近想整理一下牛课进度&#xff0c;顺便看了下表格绘制方法 绘制表格方法&#xff1a;绘制表格 二、 2.1 牛客序号题目知识点难度状态链接其…

【C++】牛客——活动安排

✨题目链接&#xff1a; AB31 活动安排 ✨题目描述 给定&#x1d45b;个活动&#xff0c;每个活动安排的时间为[&#x1d44e;&#x1d456;,&#x1d44f;&#x1d456;)。求最多可以选择多少个活动&#xff0c;满足选择的活动时间两两之间没有重合。 ✨输入描述: 第一行…

北交所的股票交易佣金最低是多少?万分之二算低的吗?

北交所的佣金目前最低是万分之二&#xff0c;不过只有少数证券公司是这个标准。普通股票佣金万1&#xff0c;融资利率是4.0%~5.0%&#xff01; 北交所佣金一般是万分之6&#xff0c;北交所全称是北京证券交易所&#xff0c;是一家公司制交易所&#xff0c;北交所的佣金比普通股…

【JVM底层原理,JVM架构详解】

1. JVM简介 1.1 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 主流虚拟机: 虚拟机名称介绍HotSpotOracle/Sun JDK和OpenJDK都使用HotSPo…

人大金仓python驱动安装指引

最好使用虚拟环境&#xff0c;避免各种路径异常问题 在指定目录下创建虚拟环境 python3 -m venv myenv myenv可以是一个路径&#xff0c;当前命令会创建一个叫myenv的目录&#xff0c;目录里放的是虚拟环境所需的可执行文件 激活虚拟环境 source myenv/bin/activate 退出虚…

2024-05-28 服务器开发-不同vs版本的std::string的访问出错问题-记录

摘要: 有一个dll库是使用vs2010编译的, 使用这个dll动态库的工程是vs2019. 这个dll动态库返回一个结构体&#xff0c;其中有个成员使用了std::string。但是遇到了std::string的成员显示被赋值为NULL的情况。 本文对进行分析, 重点在于追踪问题的思路。 问题描述: dll使用vs20…

保护“第二生命线”,科技守护颈椎健康

脊柱支撑着人体重量&#xff0c;汇集着众多血管神经&#xff0c;素有“人体第二生命线”之称。在如今快节奏的时代&#xff0c;人们生活方式也在发生着变化&#xff0c;长期低头看手机、伏案久坐等不良生活习惯引发脊柱健康问题&#xff0c;且呈现年轻化趋势。目前&#xff0c;…