NumPy学习:NumPy(Numerical Python)基础(一)

在这里插入图片描述

1.什么是NumPy

  NumPy 是 Python 中用于科学计算的基础包。 它是一个 Python 库,提供多维数组对象, 各种派生对象(例如掩码数组和矩阵),以及 用于对阵列进行快速操作的各种例程,包括 数学、逻辑、形状操作、排序、选择、I/O、 离散傅里叶变换、基本线性代数、基本统计 操作、随机模拟等等。
  NumPy 包的核心是ndarray对象。这 封装同构数据类型的 N 维数组,其中 为了提高性能,在编译的代码中执行许多操作。 NumPy 数组和 标准 Python 序列:

  • 与 Python 列表不同,NumPy 数组在创建时具有固定大小 (可以动态增长)。更改 ndarray 的大小将 创建一个新数组并删除原始数组。
  • NumPy 数组中的元素都必须相同 数据类型,因此在内存中的大小将相同。例外情况: 可以有(Python,包括 NumPy)对象的数组,从而 允许不同大小元素的数组。
  • NumPy 数组有助于高级数学和其他类型的 对大量数据的操作。通常,此类操作是 与使用 Python 的内置序列。
  • 越来越多的基于 Python 的科学和数学 软件包使用 NumPy 数组;尽管这些通常支持 Python 序列输入,它们先将此类输入转换为 NumPy 数组 进行处理,并且它们经常输出 NumPy 数组。换言之, 为了有效地使用当今的大部分(甚至大部分)的 基于Python的科学/数学软件,只是知道如何 使用 Python 的内置序列类型是不够的 - 一个也是 需要知道如何使用 NumPy 数组。

2.如何导入NumPy

  将导入的名称缩短为了提高代码的可读性,这是一种广泛的约定,可使代码更具可读性。

import numpy as np

3.基础知识

  NumPy的主要对象是同构多为数组,是一个元素表(通常为数字),所有元素类型相同,由非负整数的元组索引。
  在NumPy维度中被称为。例如,3D空间中的点坐标[1,2,1]具有一个轴,该轴有3个元素,也说它的长度为3。

[[2,3,2],[1,3,2]]

  上面的例子中数组有2个轴,第一个轴表示行,长度为2;第二个轴表示列,长度为3,
  NumPy的数组类被称为ndarray,它的属性有:

  • ndarray.ndim: 数组的轴(维度)的个数。在Python世界中,维度的数量被称为rank。
  • ndarray.shape: 数组的维度。这是一个整数的元组,表示每个维度中数组的大小。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
  • ndarray.size: 数组元素的总数。这等于 shape 的元素的乘积。
  • ndarray.dtype: 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
  • ndarray.itemsize: 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。
  • ndarray.data: 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。
属性名称属性解释
ndarray.shape返回一个元组,其中包含ndarray对象的每个维度的大小
nbytes返回数组中所有元素所占用的字节数
ndarray.T返回数组的转置视图
ndarray.real返回数组实部的视图
ndarray.imag返回数组虚部的视图
ndarray.flat返回一个数组元素迭代器
ndarray.flags返回一个描述数组内存块信息的对象,例如是否为C或Fortran连续等
ndarray.strides返回每个维度中相邻元素的字节数组成的元组,也可以用于判断数组是否是连续的
ndarray.base如果数组是视图,则返回其基础数组,否则返回None
ndarray.ctypes返回表示数组内存块的ctypes对象
import numpy as np
arr = np.arange(15).reshape(3,5) #生成一个3行5列的数组对象arr

print(arr.ndim) # 输出 2  表示2个轴  行和列
print(arr.shape) # 输出(3,5) 表示3行5列
print(arr.size) # 输出15  表示元素的个数
print(arr.dtype.name) # 输出 int32
print(arr.itemsize) # 输出 4 

4.创建数组

  1)使用array函数从常规Python列表或元组中创建数组。
  得到的数组是从Python列表中元素推导出来的。

import numpy as np
arr1 = np.array([4,4,5]) # 创建一维数组
print(arr1.dtype.name)

arr2 = np.array([[3,4,5],[6,7,8]]) # 创建二维数组
print(arr2.dtype.name)

arr3 = np.array((1.1,3.14,5.0)) # 创建浮点数数组
print(arr3.dtype.name)

在这里插入图片描述

  2)数组的类型可以在创建时显示指定

import numpy as np
arr1 = np.array([[1,2],[3,4]],dtype= complex)
print(arr1)

在这里插入图片描述

  3)通常,数组的元素最初是未知的,但其大小是 已知。因此,NumPy 提供了几个函数来创建 具有初始占位符内容的数组。这些最大限度地减少了 不断增长的阵列,这是一项昂贵的操作。

import numpy as np
arr_empty = np.empty((3,2),dtype=np.float64)
arr_empty

在这里插入图片描述

import numpy as np
arr_zeros = np.zeros((3,2),dtype=np.int16)
arr_zeros

在这里插入图片描述

import numpy as np
arr_ones = np.ones((2,3),dtype = np.int16)
arr_ones

在这里插入图片描述
 4)为了创建数字序列,numpy提供了arange函数,可以生成一个数组。

import numpy as np
arr = np.arange(10,30,5)
print(arr)

arr1 = np.arange(0.1,2,0.4)
print(arr1)

在这里插入图片描述
  当range与浮点数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量,通常使用linspace函数生成想要的元素数量数组

import numpy as np
arr_floats = np.linspace(0,2,9)
print(arr_floats)

arr_floats1 = np.linspace(0,2*np.pi,10)
print(arr_floats1)

在这里插入图片描述

5. 打印数组

  当打印数组时,NumPy以与嵌套列表类似的方式显示它,但具有以下布局:

  • 最后一个轴从左到右打印,
  • 倒数第二个从上到下打印,
  • 其余部分也从上到下打印,每个切片用空行分隔。

  然后将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表。

import numpy as np
# 打印一维数组
arr1 = np.array([3,2,5])
print(arr1)

# 打印二维数组
arr2 = np.arange(30).reshape(5,6)
print(arr2)

# 打印三维数组
arr3 = np.arange(24).reshape(2,3,4)
print(arr3)

在这里插入图片描述
  如果数组太大而无法打印,NumPy会跳过数组的中间部分仅打印角点.
  如果要禁用此行为并强制numpy打印整个数组,可以更改打印选项:set_printoptions

np.set_printoptions(threshold=sys.maxsize)
import numpy as np
print(np.arange(10000))
print(np.arange(10000).reshape(100,100))

在这里插入图片描述

6.基本操作

6.1 数组间的运算符

  这些运算符使得可以方便的对数组进行各种数学和逻辑运算,而不必编写循环,在进行逐元素运算时,NumPy会自动将运算应用到数组的每个元素上。
  1) 算术运算符

  • “+” : 逐元素加法
  • “-” : 逐元素减法
  • “*” : 逐元素乘法
  • “/” : 逐元素除法
import numpy as np

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

result1 = arr1 + arr2
print(result1)

result2 = arr2 - arr1
print(result2)

result3 = np.multiply(arr1, arr2)
print(result3)  # 输出: [4, 10, 18]

result4 = arr1 * arr2
print(result4)  # 输出: [4, 10, 18]

result5 = arr1 / arr2
print(result5)

在这里插入图片描述
2) 比较运算符

  • “==” : 逐元素相等。
  • “!=” : 逐元素不等。
  • “>”、“>=”、“<”、“<=” : 逐元素大于、大于等于、小于、小于等于。
import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([1, 5, 3])

result = arr1 == arr2
print(result)  # 输出: [ True False  True]

result1 = arr1 < arr2
print(result1)  # 输出: [ False  True False]

在这里插入图片描述
3) 逻辑运算符

  • “&” : 逐元素的按位与。
  • “|”、“^” :逐元素的按位或、按位异或
import numpy as np

arr1 = np.array([True, True, False])
arr2 = np.array([True, False, False])

result = arr1 | arr2
print(result)  # 输出: [ True False False]

4) 其他运算符

  • “**” : 逐元素的指数运算
  • “@”、“matmul()” : 执行矩阵乘法
import numpy as np
arr = np.array([1,2,3,4,5])
result = arr**2
print(result) # 输出 [ 1  4  9 16 25]
import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

result = A @ B  # 或者 np.matmul(A, B)
print(result) # 输出 [[19 22] [43 50]]

参考

https://numpy.org/doc/stable/user/quickstart.html

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTF-misc(1)图片隐写

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)BurpsuiteAWD比赛(1)AWD入门攻略大纲CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 图片隐写目录 (1)GIf和二维码隐写 二维码补全 二维码绘图 Gif规律分析 (2)文本附加图片隐写 (3)IHDR文件头修复图片宽高 (…

【深度学习】强化学习(一)强化学习定义

文章目录 一、强化学习问题1、交互的对象1. 智能体&#xff08;Agent&#xff09;2. 环境&#xff08;Environment&#xff09; 2、强化学习的基本要素1. 状态 &#x1d460;2. 动作 &#x1d44e;3. 策略 &#x1d70b;(&#x1d44e;|&#x1d460;)4. 状态转移概率 &#x1…

深度学习训练过程自查:为什么我的模型不收敛/表现不佳?

代码终于写完了&#xff0c;bug 处理好了&#xff0c;终于跑起来了。但是模型不收敛。或者收敛了&#xff0c;但是加 trick 也表现不良。看着这个精心编写的辣鸡模型&#xff0c;从内心深处生出一股恨铁不成钢的悲愤。 于是开始思考&#xff0c;为什么&#xff1f;哪里出了问题…

上海亚商投顾:沪指探底回升微跌 AI概念股全线反弹

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 大指数早间震荡调整&#xff0c;午后探底回升集体翻红&#xff0c;临近尾盘又小幅走弱。AI概念股全线反弹&…

2024年值得关注的8个未来数据库

2024年值得关注的8个未来数据库 关系型数据库管理系统在数据库技术领域占据主导地位已经多年了。当SQL在1970年代首次出现时&#xff0c;关系型数据库管理系统的使用和受欢迎程度迅速提升。很快&#xff0c;MySQL成为了大多数公司和团队首选的数据库。 然而&#xff0c;2023年…

2023下软件设计师备考分享(机考改革)

目录 一、机考最大的感受&#xff08;⭐⭐⭐&#xff09; 1、个人情况说明 2、试卷难易程度 3、机考作答情况 4、考场内部情况 二、学习备考方案&#xff08;⭐⭐⭐&#xff09; 1、大纲要求 2、b站up主zst 3、准备工作 4、复习计划 三、软件设计师笔记&#xff08;…

VS2015编译GDAL3.2.0+opencl+C#

参考借鉴https://www.cnblogs.com/litou/p/15004877.html 参考借鉴https://www.cnblogs.com/xiaowangba/p/6313903.html 参考借鉴gdal、proj、geos、sqlite等在VS2015下编译和配置_vs2015编译sqlite3-CSDN博客 参考借鉴Windows下GDAL3.1.2编译 (VS2015)_gdal windows编译-CS…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之设备管理》(28)

《Linux操作系统原理分析之设备管理》&#xff08;28&#xff09; 9 设备管理9.1 设备与设备管理9.1.1 设备的分类 9.2 I/O 控制方式9.2.1CPU 控制方式9.2.2 通道控制方式 9.3 缓冲技术9.3.1 缓冲技术的引进9.3.2 缓冲的种类 9.4 设备的分配9.4.1 设备管理的数据结构9.4.2 设备…

SQL Server——权限管理

一。SQL Server的安全机制 SQL Server 的安全性是建立在认证和访问许可两种安全机制之上的。其中&#xff0e;认证用来确定登录Sal Server 的用户的登录账户和密码是否正确&#xff0e;以此来验证其是否具有连接SQL Server 的权限;访问许可用来授予用户或组能够在数据库中执行哪…

火狐,要完了!

在过去几年中&#xff0c;关于Firefox 浏览器的衰落有过不少讨论。目前来说&#xff0c;很多公共的以及私营的大型网站都缺乏对Firefox的适当支持。但是Firefox也多次试图“自救”&#xff0c;甚至就在不久前&#xff0c;Mozilla 通过官博发文&#xff0c;表示 Firefox 在 2023…

ODrive移植keil(九)—— 抗齿槽效应算法

目录 一、齿槽效应1.1、齿槽效应的定义1.2、产生原因1.3、解决办法 二、硬件接线三、ODrive官方代码操作3.1、固件版本v0.5.13.2、抗齿槽校准原理3.3、校准注意事项3.4、校准操作 四、移植后的代码操作五、总结 ODrive、VESC和SimpleFOC 教程链接汇总&#xff1a;请点击   一、…

网络安全行业大模型调研总结

随着人工智能技术的发展&#xff0c;安全行业大模型SecLLM&#xff08;security Large Language Model&#xff09;应运而生&#xff0c;可应用于代码漏洞挖掘、安全智能问答、多源情报整合、勒索情报挖掘、安全评估、安全事件研判等场景。 参考&#xff1a; 1、安全行业大模…

【Java 基础】24 日期操作

文章目录 1.Date2.LocalDate3.LocalTime4.LocalDateTime5.DateTimeFormatter6.Period7.Duration8.ZoneId9.ZonedDateTime总结 日期和时间是我们常见的操作对象&#xff0c;Java 也提供了强大的日期和时间处理类库&#xff0c;使我们可以方便的进行日期的表示、计算、格式化等。…

SQL Server数据库的备份和还原

6.2 SQL Server备份和还原 数据库管理员最担心的情况就是数据库瘫痪&#xff0c;造成数据丢失&#xff0c;而备份作为数据的副本&#xff0c;可以有 效地保护和恢复数据。本节将介绍数据备份的原因&#xff0c;备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。 6.2…

思维模型 色彩心理效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知色彩影响情绪。 1 色彩心理效应的应用 1.1 色彩心理效应在营销中的应用 1 可口可乐公司的“红色”营销 可口可乐公司是全球最著名的饮料品牌之一&#xff0c;其标志性的红色包装已经成为了…

嵌入式_基于STM32F4标准库的Flash读写操作

嵌入式_基于STM32F4标准库的Flash读写操作 文章目录 嵌入式_基于STM32F4标准库的Flash读写操作前言一、STM32F4的 Flash 简介二、闪存的读写操作1.闪存的读取2.闪存的解锁、擦除和写入1.闪存解锁2.闪存擦除3.闪存写入 三、完整代码 前言 在STM32芯片内有一个Flash存储器断电后…

整数二分的建模

当题目能够使用整数二分法建模时&#xff0c;主要有整数二分法思想进行判定&#xff0c;它的基本形式如下&#xff1a; while(left < right) {int ans;//记录答案 int mid left (right - left) / 2;//二分if(check(mid)){//检查条件&#xff0c;如果成立 ans mid;//记录…

学习spring、springmvc、mybatis、ssm所有可能用到的依赖总结,父工程pom文件依赖,<packaging>pom</packaging>

1、父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/PO…

Java:UDP 通信方法(发送 + 接收)并 实现简单的聊天 详细代码

文章目录 UDP 通信编程发送 数据接收 数据实现简易的通信聊天 UDP 通信编程 发送 数据 创建 DatagramSocket 对象&#xff08;创办 快递公司&#xff09; 不传参&#xff0c;随机一个可用端口&#xff0c;传参&#xff0c;可指定端口。&#xff08;发送端口&#xff09;创建 …

Leetcode算法题笔记(1)

目录 哈希1. 两数之和1.1 解法11.1 解法2 2. 字母异位词分组2.1 解法12.2 解法2 3. 最长连续序列3.1 解法 小结 双指针4. 移动零4.1 解法14.2 解法2 5. 盛最多水的容器5.1 解法一5.2 解法二 6. 三数之和6.1 解法16.2 解法2 7. 接雨水7.1 解法1 小结 滑动窗口8. 无重复字符的最长…