深入理解NumPy库:常用函数详解与数组操作指南

     在数据科学和数值计算领域,NumPy无疑是一个强大的工具,它为Python提供了高效的多维数

组处理能力。无论是进行数据分析、构建机器学习模型,还是进行复杂的科学计算,NumPy都是

不可或缺的核心库之一。

        numpy.array 是 NumPy 库中的一个基本对象,它提供了一个多维数组对象,可以用来存储

同类型数据的集合

        NumPy 是 Python 中进行科学计算的基础库之一,它提供了大量的数值计算功能。

1. 数据结构

        numpy.array 是一个多维数组,它由元素(通常是数字)组成,这些元素在内存中是连续存

的。

        数组可以是任意维度的,例如一维数组(向量)、二维数组(矩阵)、三维数组等。

2. 类型

        NumPy 数组中的所有元素必须是同一类型,例如整数、浮点数、复数等。

        数组的数据类型可以通过 dtype 属性来查看,例如 int32、float64、complex128 等。

3. 属性

        ndim:数组的维度。

        shape:数组的形状,即每个维度的大小。

        size:数组中元素的总数。

        dtype:数组元素的数据类型。

4. 创建数组

        可以通过传递一个 Python 列表(或其它可迭代对象)给 numpy.array 来创建一个数组。

        可以指定数组的 dtype,如果不指定,NumPy 会根据输入数据的类型自动推断。

import numpy as np# 创建一个一维数组a = np.array([1, 2, 3, 4, 5])# 创建一个二维数组b = np.array([[1, 2, 3], [4, 5, 6]])print(a)print(b)

运行结果 

为什么要使用 numpy.array?

        1. 性能

        NumPy 数组在执行数学运算时比 Python 内置的列表要快得多,因为 NumPy 的操作是在底

层执行的,这些底层是用 C 语言写的。

        2. 功能

        NumPy 提供了大量方便的数学函数和线性代数运算功能,可以直接在数组上使用。

        3. 内存效率

        NumPy 数组在存储数据时比 Python 列表更加紧凑,特别是对于大型数据集。

        4. 广播

        NumPy 支持广播规则,这使得在不同形状的数组之间进行操作成为可能,而无需显式地扩展

它们的大小。

        numpy.zeros 是 NumPy 库中的一个函数,它用于创建一个指定形状和数据类型的新数组,

并将其所有元素初始化为 0

        1. 用途

        numpy.zeros 用于创建一个零矩阵或零向量,这在初始化数据结构、创建占位符数组等场景

中非常有用。

        2. 参数

        shape:一个整数或整数元组,指定输出数组的形状。例如,5 表示一维数组,(2, 3) 表示二

维数组,其中有 2 行 3 列。

        dtype:可选参数,指定数组元素的数据类型默认是 float,即 float64。

        order:可选参数,指定数组数据在内存中的存储顺序,可以是 'C'(按行,C-style)或

'F'(按列,Fortran-style)。默认是 'C'。

import numpy as np# 创建一个一维数组,5个元素,数据类型默认为float64x = np.zeros(5)# 创建一个二维数组,2行3列,数据类型为整型y = np.zeros((2, 3), dtype=int)# 创建一个三维数组,2页3行4列,数据类型为float32z = np.zeros((2, 3, 4), dtype=np.float32)print(x, y, z)  # 打印结果

运行结果

        注意事项

        如果 shape 参数是一个整数,numpy.zeros 会创建一个一维数组。

        如果 shape 参数是一个元组,numpy.zeros 会创建一个多维数组,其形状与元组中的值相对

应。

        如果 dtype 参数未指定,默认创建的数组元素类型是 float64。

        numpy.zeros 创建的数组元素总是填充为 0,如果需要填充其他值,可以使用 numpy.ones

(填充为 1)或 numpy.full(填充为指定值)。

        numpy.ones 是 NumPy 库中的一个函数,用于创建一个指定形状和数据类型的新数组,并

将其所有元素初始化为 1。

        1. 用途

        numpy.ones 用于创建一个元素全部为 1 的矩阵或向量,这在初始化权重矩阵、创建单位矩阵

等场景中非常有用。

        2. 参数

        shape:一个整数或整数元组,指定输出数组的形状

        dtype:可选参数,指定数组元素的数据类型。默认是 float,即 float64。

        order:可选参数,指定数组数据在内存中的存储顺序,可以是 'C'(按行,C-style)

或 'F'(按列,Fortran-style)。默认是 'C'。

import numpy as npones_arr = np.ones((2, 3))  # 创建一个2行3列的二维数组,并将所有元素都初始化为1print(ones_arr)  # 打印结果

运行结果

        numpy.empty 是 NumPy 库中的一个函数,用于创建一个指定形状的新数组,但不初始化其

元素。这意味着数组中的元素将包含内存中的随机值

        1. 用途

        numpy.empty 用于创建一个未初始化的数组,其元素值是未定义的

        当性能至关重要且不需要预先填充数据时,使用 numpy.empty 可以节省初始化数组的时间。

        2. 参数

        shape:一个整数或整数元组,指定输出数组的形状。

        dtype:可选参数,指定数组元素的数据类型。默认是 float,即 float64。

        order:可选参数,指定数组数据在内存中的存储顺序,可以是 'C' 或 'F'。默认是 'C'。

import numpy as npempty_arr = np.empty((2, 3))  # 创建一个 2 行 3 列的二维数组,其元素包含内存中的随机值print(empty_arr)  # 打印结果

运行结果

注意事项

        numpy.empty 不会初始化数组元素,因此数组中的值是未定义的,可能是任何值。

        使用 numpy.empty 时,应该立即用有效的数据填充数组,以避免在后续的计算中出现不可预

测的结果。

        numpy.empty 通常用于创建大型数组,并且当数组将被立即填充时使用,以节省初始化时

间。

        numpy.arange 是 NumPy 库中的一个函数,用于创建一个一维数组,数组元素是在给定间隔

内的均匀间隔的值。

        1. 用途

        numpy.arange 用于生成一系列数字类似于 Python 内置的 range 函数,但它返回的是一个

NumPy 数组

        2. 参数

        start:可选参数,序列的起始值,默认为 0。

        stop:序列的结束值,生成的序列不包括此值。

        step:可选参数,序列中的步长,默认为 1。

        dtype:可选参数,指定返回数组的数据类型。

import numpy as nprange_arr = np.arange(10)print(range_arr)  # 打印结果

运行结果

        numpy.linspace 是 NumPy 库中的一个函数,用于创建一个一维数组,数组元素在指定的起

始值和结束值之间均匀分布。

        1. 用途

        numpy.linspace 用于在指定的起始值和结束值之间生成指定数量的均匀间隔的样本

        2. 参数

        start:序列的起始值。

        stop:序列的结束值。

        num:生成的样本数量,默认为 50。如果 num 是 1,则返回 start 和 stop 之间的单个值。

        endpoint:可选参数,如果为 True,则 stop 是最后一个样本。默认为 True。

        retstep:可选参数,如果为 True,则返回样本和步长。

import numpy as nplin_space_arr = np.linspace(0, 10, num=5)  # linspace_arr 是一个包含 5 个元素的数组,这些元素在 0 到 10 之间均匀分布。print(lin_space_arr)    # 打印输出结果

运行结果

        

        numpy.logspace 是 NumPy 库中的一个函数,用于创建一个一维数组,数组元素在指定的

起始值和结束值之间按对数刻度均匀分布

1. 用途

   numpy.logspace 用于在指定的起始值和结束值之间生成指定数量的对数刻度上的均匀间隔的样本。

2. 参数

   start:起始值的对数值。

   stop:结束值的对数值。

   num:生成的样本数量。

   endpoint:可选参数,如果为 True,则 stop 是最后一个样本。

   base:对数的底数,默认为 10。

   dtype:可选参数,指定返回数组的数据类型。

import numpy as nplogspace_arr = np.logspace(0, 10, num=5, base=10)    # logspace_arr 是一个包含 5 个元素的数组,这些元素在 10^0 到 10^10 之间按对数刻度均匀分布。# 默认情况下 base 参数是 10,所以这里实际上是从 1 到 10^10。print(logspace_arr)    # 打印结果

运行结果

        numpy.shape 返回一个表示数组维度的元组。

        用途:获取数组的维度信息,这对于理解数据的结构非常重要。

        工作原理:它不改变数组本身,而是提供了一个元组,元组中的每个元素对应数组在该维度

上的大小。

import numpy as nparr_1 = np.array([1, 2, 3, 4, 5])arr_2 = np.array([4, 5, 6, 7, 8, 9])print(arr_1.shape)  # 打印数组的形状,即每个维度的大小

运行结果

        numpy.reshape 改变数组的形状而不改变其数据。

        用途:当你需要改变数组的维度以适应不同的计算需求时,reshape 非常有用。

        工作原理:它返回一个新的数组对象,其数据与原始数组相同,但形状不同。

        如果新形状的总大小与原始数组相同,则操作成功;否则,会抛出错误。

import numpy as nparr_1 = np.array([1, 2, 3, 4, 5])arr_2 = np.array([4, 5, 6, 7, 8, 9])print(arr_1.shape)  # 打印数组的形状,即每个维度的大小print(arr_2.reshape((2, 3)))

运行结果

        numpy.resize 改变数组的大小,必要时会重复或截断数据。

        用途:当你需要一个具有特定大小的新数组,并且不介意填充或丢失数据时

        工作原理:如果新大小大于原始大小,它会重复原始数组中的数据以填充新数组。

        如果新大小小于原始大小,它将截断数据。

import numpy as nparr_1 = np.array([1, 2, 3, 4, 5])arr_2 = np.array([4, 5, 6, 7, 8, 9])print(arr_1.shape)  # 打印数组的形状,即每个维度的大小print(arr_2.reshape((2, 3)))print(np.resize(arr_2, (3, 3)))

运行结果

        numpy.flatten 将多维数组转换为一维数组。

        用途:当你需要将多维数据简化为一维数据时。

        工作原理:它返回一个一维数组,该数组按C风格顺序(行优先)展开原始数组的元素

import numpy as nparr_1 = np.array([1, 2, 3, 4, 5])arr_2 = np.array([4, 5, 6, 7, 8, 9])print(arr_1.shape)  # 打印数组的形状,即每个维度的大小print(arr_2.reshape((2, 3)))arr_3 = np.resize(arr_2, (3, 3))print(arr_3.flatten())

运行结果

        

        numpy.concatenate 沿现有轴连接两个或多个数组。

        用途:当你需要将多个数组沿某个轴合并时。

        工作原理:它接受一个元组或列表作为输入,其中包含要连接的数组,以及一个可选的 axis

参数,指定连接的轴。

        示例:如果 arr1 和 arr2 都是长度为 3 的一维数组,np.concatenate((arr1, arr2)) 将返回一个

长度为 6 的新数组。       

        numpy.stack 沿新轴连接两个或多个数组。       

        用途:当你需要创建一个新的维度来组合多个数组时。

        工作原理:与 concatenate 不同,stack 创建一个新的轴,所有输入数组都沿着这个新轴堆

叠。

        示例:如果 arr1 和 arr2 都是长度为 3 的一维数组,np.stack((arr1, arr2), axis=0) 将返回一个

2x3 的二维数组。       

        numpy.split 将一个数组分割成多个子数组。       

        用途:当你需要根据指定的索引将数组分割成多个部分时。

        工作原理:它接受一个数组和一个索引列表,根据这些索引将数组分割成多个子数组。

        索引指定了分割点。

        示例:如果 arr 是一个长度为 6 的一维数组,np.split(arr, [2, 4]) 将返回三个子数组,分别包

含前两个元素、接下来的两个元素和最后两个元素。       

        numpy.sort 对数组进行排序。      

        用途:当你需要对数组中的元素进行排序时。

        工作原理:它返回数组的排序副本,原始数组保持不变。可以指定排序的轴,默认情况下,

一维数组沿着 0 轴排序。

        示例:如果 arr 是一个未排序的数组,np.sort(arr) 将返回一个排序后的数组。

备注

1.   dtype 属性确定和识别存储的数据类型的理解

        在 NumPy 库中,每个数组都有一个与之关联的数据类型,称为  dtype (数据类型)。

        这个  dtype  属性告诉我们数组中的元素属于哪种数据类型,例如整数、浮点数、复数等,以

及这些数据类型占用的内存大小。

数据类型

        int32:表示数组中的元素是32位整数。

        这意味着每个整数元素占用32位的内存空间,能够表示的整数范围是从 2^31 到 2^31  1。

        float64:表示数组中的元素是64位浮点数,也称为双精度浮点数。

        每个浮点数元素占用64位的内存空间,能够表示非常大或非常小的数值,以及很高的数值精

度。
        complex128:表示数组中的元素是128位复数。

        每个复数元素由两个64位浮点数组成,分别表示复数的实部和虚部。

import numpy as np# 创建一个整数类型的数组array_int = np.array([1, 2, 3])print(array_int.dtype)  # 输出# 创建一个浮点类型的数组array_float = np.array([1.0, 2.0, 3.0])print(array_float.dtype)  # 输出# 创建一个复数类型的数组array_complex = np.array([1+2j, 3+4j])print(array_complex.dtype)  # 输出

2. 对数组形状的理解

数组形状的定义

        数组的形状指的是数组在每个维度上的大小

        简单来说,它描述了数组是如何排列和组织的。

维度和形状

        一维数组:只有一个维度,形状是一个数字,表示数组中元素的数量。

        二维数组:有两个维度,形状是两个数字的元组,分别表示行数和列数。

        三维数组:有三个维度,形状是三个数字的元组,可以理解为一系列的“页”,每一页是一个二

维数组。

        更高维数组:以此类推,每个额外的维度都会增加一个数字到形状元组中。

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

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

相关文章

C# 获取可执行文件目录

---------------------------------------------------------------------------

SpringMVC框架:入门讲解和基础案例解析

Spring Web MVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型 。框架的目的就是帮助我们简化开发&…

PCB板材基本知识

术语 名称定义插图 copper foil 铜箔 Copper Clad Laminates,CCL 覆铜箔层压板 CCL是PCB制造的上游核心材料,是将电子玻纤布或其它增强材料浸以树脂,一面或双面覆以铜箔并经热压而制成的一种板状材料,担负着(PCB&am…

优先级队列详解

一,优先级队列 什么是优先级队列呢,不知道大家了解过队列没有,队列是一种先进先出的数据结构,但是我们有时会想让优先级高的先出队列,所以我们出现了一种新的数据结构,我们实现两种主要功能得到优先级高的数…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习07(基于docker容器的防火墙及NAT企业实战)

7.1 网络准备 7.2 网络规划 1)虚拟网络编辑器 点击右下方“更改设置”,点击“添加网络”假如vmnet3和vmnet4,然后分别选择vmnet3和vmnet4,设置为“仅主机模式”,按③处处理,去掉“使用DHCP”,…

ORA-19815 db_recovery_file_dest_size 100%

1、alert日志报错 ORA-19815 db_recovery_file_dest_size 100% 恢复区空间使用满 2、rm删除后操作系统空间使用,但V$RECOVERY_FILE_DEST记录的空间使用率仍然是满的 3、rman delete expired 归档日志后恢复正常 4、当然可以通过增大db_recovery_file_dest_size来临时…

牛客——xay loves or与 __builtin_popcount的使用

xay loves or 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行思路 题目要求我们计算有多少个正整数 yy 满足条件 x \text{ OR } y sx OR ys。这里的“OR”是指按位或运算。为了理解这个问题,我们需要考虑按位或运算的性质。 对于任意两个位 a_iai​ 和 b_…

HUAWEI_HCIA_实验指南_Lib1.4_配置通过Telnet登录系统

一、原理概述 Telnet(Telecommunication Network Protocol)起源于ARPANET,是最早的Internet应用之一。 Telnet 通常用在远程登录应用中,以便对本地或远端运行的网络设备进行配置、监控和维护。如网络中有多台设备需要配置和管理,用户无需为每一台设备…

NUKE 15有哪些新的改进功能?影视后期特效合成NUKE 15 安装包分享 【Mac/win】

Nuke 15是一款由英国The Foundry公司开发的专业的合成软件,被广泛用于电影、电视和广告制作中的后期合成和特效制作。 Nuke 15拥有强大的功能和灵活性,可以帮助用户处理各种复杂的合成任务,包括图像修复、色彩校正以及粒子特效等。它具备高效…

Java项目实战II基于Java+Spring Boot+MySQL的高校学科竞赛平台

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着高等教…

【JavaScript】JS核心语法及函数

文章目录 一、初识 JS二、JS 核心语法2-1 变量2-2 数据类型typeofString 对象 2-3 数组创建数组常用属性方法 2-4 运算符号加号运算符 减号运算符 -比较运算符逻辑运算符 2-5 控制语句for-inbreakcontinue 三、函数3-1 常用系统函数3-2 自定义函数函数声明函数调用 3-3 创建对象…

家里养有宠物应该用哪款宠物空气净化器比较好?哪款最能吸毛?

这不是国庆节刚过吗,我的小猫终于是平安的度过了在农村生活的时光,之前还担心会不会被爸妈嫌弃,这下好了,嫌弃也过了国庆节。 但是一把猫咪带回出租房,由于几天不在房子里待,猫咪对熟悉的环境又特别激动&a…

C语言贪吃蛇

#只讲逻辑不讲一些基础,基础大概过一遍就行# project-one: 无 (gitee.com)仓库里面有原代码 一、基础工作 1、先将你的编译器换成32位环境,也就是x86, 如果是控制台主机窗口则管,若不是需要改为控制台主机窗口 打开运行窗口后点…

构建宠物咖啡馆:SpringBoot框架的实现策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…

Authentication Lab | IP Based Auth Bypass

关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客 0x01:IP Based Auth Bypass 前情提要 有些开发人员为了图方便,会给站点设置一个 IP 白名单,如果访问站点的用户的 IP 在白名单内,则允许访…

PDSCH(物理下行共享信道)简介

文章目录 PDSCH(物理下行共享信道)简介1. Transport block CRC attachment2. LDPC base graph selection3. Code block segmentation And Code Block CRC Attachment4. Channel Coding5. Rate Matching6. Code Block Concatenation7. Scrambling8. Modul…

react自定义prolayout的展开收起

关于prolayout组件:ProLayout高级布局🏆 让中后台开发更简单 包含 table form 等多个组件。https://procomponents.ant.design/components/layout // tsx文件 import ProLayout from ant-design/pro-layout; ... const [collapsed,setCollapsed]useStat…

全网首发Windows Server 2019 AD 域控降级与退域的全面指南

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…(每天更新不间断,福利…

微信小程序——婚礼邀请函

一、界面设计 首页: 精美的婚礼主题背景图,可能是新人的婚纱照或浪漫的插画。温馨的欢迎语,如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮,引导用户进入邀请函详情页面。 邀请函详情页面: 顶部展示新人的照片…

【数据结构与算法】Divide and Conquer

4.4 Divide and Conquer 1) 概述 分治思想 将大问题划分为两个到多个子问题子问题可以继续拆分成更小的子问题,直到能够简单求解如有必要,将子问题的解进行合并,得到原始问题的解 之前学过的一些经典分而治之的例子 二分查找快速排序归并…