Numpy快速入门(1)

文章目录

  • 一、Numpy是什么?
  • 二、基础知识
    • 1.数组创建
    • 2.数组的索引、切片和迭代
    • 3.形状操纵

一、Numpy是什么?

  NumPy是一个开源的Python库,提供了多维数组对象(ndarray)和用于处理这些数组的函数。它是科学计算和数据分析的基础库之一,被广泛应用于各种领域,包括数值计算、数据处理、机器学习、图像处理等。

二、基础知识

  NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在NumPy维度中称为 轴 。

轴的数量和维度取决于数组的形状。例如,一个二维数组具有两个轴,一个三维数组具有三个轴,以此类推

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

这个数组有两个轴,第一个轴是行轴(axis 0),第二个轴是列轴(axis 1)。

  NumPy的数组类被调用ndarray。它也被别名所知 array。请注意,numpy.array这与标准Python库类不同array.array,后者只处理一维数组并提供较少的功能。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 - 该缓冲区包含数组的实际元素。通常,我们不需要使用此属性,因为我们将使用索引访问数组中的元素。
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>

1.数组创建

1.使用列表(List)创建数组:
可以使用Python的列表来创建数组。使用numpy.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]])
print(arr2)
# [[1 2 3]
#  [4 5 6]]

2.使用NumPy的函数创建数组:
NumPy提供了许多函数用于创建特定类型的数组。

  • numpy.zeros():创建全零数组。
  • numpy.ones():创建全一数组。
  • numpy.full():创建指定值的数组。
  • numpy.arange():创建指定范围的递增数组。
  • numpy.linspace():创建指定范围内的等间隔数组。
  • numpy.random.rand():创建随机数数组。
import numpy as np# 创建全零数组
zeros_arr = np.zeros((3, 4))
print(zeros_arr)
# [[0. 0. 0. 0.]
#  [0. 0. 0. 0.]
#  [0. 0. 0. 0.]]# 创建全一数组
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]]# 创建递增数组
range_arr = np.arange(0, 10, 2)
print(range_arr)  # [0 2 4 6 8]# 创建等间隔数组
linspace_arr = np.linspace(0, 1, 5)
print(linspace_arr)  # [0.   0.25 0.5  0.75 1.  ]# 创建随机数数组
rand_arr = np.random.rand(3, 2)
print(rand_arr)
# [[0.02738536 0.3610029 ]
#  [0.80069856 0.87777731]
#  [0.14728775 0.3642267 ]]

2.数组的索引、切片和迭代

1.索引(Indexing):
使用索引可以访问数组中特定位置的元素。在NumPy中,索引从0开始,可以使用整数索引或负数索引(表示从末尾开始计数)来访问元素。

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
>>> a[:6:2] = -1000    # equivalent to a[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to -1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> a[ : :-1]                                 # reversed a
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
>>> for i in a:
...     print(i**(1/3.))
...
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0

对于多维数组,可以使用逗号分隔的索引来访问特定位置的元素。

示例:

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 访问第一个元素
print(arr[0, 0])  # 1# 访问最后一个元素
print(arr[-1, -1])  # 6

2.切片(Slicing):
使用切片可以获取数组的子集,即从数组中选择一部分元素。切片操作使用冒号:进行分隔,可以指定起始索引、终止索引和步长。

import numpy as nparr = np.array([1, 2, 3, 4, 5])# 切片获取索引1到3的元素(不包括索引3)
print(arr[1:3])  # [2 3]# 切片获取从索引1开始的所有元素
print(arr[1:])  # [2 3 4 5]# 切片获取每隔一个元素的元素
print(arr[::2])  # [1 3 5]

对于多维数组,可以在每个维度上使用切片操作。

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 获取第一行的所有元素
print(arr[0, :])  # [1 2 3]# 获取第一列的所有元素
print(arr[:, 0])  # [1 4]# 获取子数组,包括第一行和第二行的前两列
print(arr[:2, :2])
# [[1 2]
#  [4 5]]
>>> def f(x,y):
...     return 10*x+y
...
>>> b = np.fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0,  1,  2,  3],[10, 11, 12, 13],[20, 21, 22, 23],[30, 31, 32, 33],[40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5, 1]                       # each row in the second column of b
array([ 1, 11, 21, 31, 41])
>>> b[ : ,1]                        # equivalent to the previous example
array([ 1, 11, 21, 31, 41])
>>> b[1:3, : ]                      # each column in the second and third row of b
array([[10, 11, 12, 13],[20, 21, 22, 23]])

b[i] 方括号中的表达式 i 被视为后面紧跟着 : 的多个实例,用于表示剩余轴。NumPy也允许你使用三个点写为 b[i,…]。
三个点( … )表示产生完整索引元组所需的冒号。例如,如果 x 是rank为5的数组(即,它具有5个轴),则:

  • x[1,2,…] 相当于 x[1,2,:,:,:],
  • x[…,3] 等效于 x[:,:,:,:,3]
  • x[4,…,5,:] 等效于 x[4,:,:,5,:]。
>>> c = np.array( [[[  0,  1,  2],               # a 3D array (two stacked 2D arrays)
...                 [ 10, 12, 13]],
...                [[100,101,102],
...                 [110,112,113]]])
>>> c.shape
(2, 2, 3)
>>> c[1,...]                                   # same as c[1,:,:] or c[1]
array([[100, 101, 102],[110, 112, 113]])
>>> c[...,2]                                   # same as c[:,:,2]
array([[  2,  13],[102, 113]])

对多维数组进行 迭代(Iterating) 是相对于第一个·轴完成的

>>> for row in b:
...     print(row)
...
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]

3.形状操纵

1.查看数组的的形状

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 查看数组形状
print(arr.shape)  # (2, 3)# 查看数组维度的数量
print(arr.ndim)  # 2# 查看数组的总元素数量
print(arr.size)  # 6

2.改变数组形状:

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6])# 改变数组形状为2行3列的二维数组
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
# [[1 2 3]
#  [4 5 6]]# 改变数组形状为3行2列的二维数组
reshaped_arr = arr.reshape((3, 2))
print(reshaped_arr)
# [[1 2]
#  [3 4]
#  [5 6]]

3.展平数组:

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 使用flatten()方法展平数组
flattened_arr = arr.flatten()
print(flattened_arr)  # [1 2 3 4 5 6]# 使用ravel()方法展平数组
raveled_arr = arr.ravel()
print(raveled_arr)  # [1 2 3 4 5 6]

4.将不同数组堆叠在一起

>>> a = np.floor(10*np.random.random((2,2)))
>>> a
array([[ 8.,  8.],[ 0.,  0.]])
>>> b = np.floor(10*np.random.random((2,2)))
>>> b
array([[ 1.,  8.],[ 0.,  4.]])
>>> np.vstack((a,b))
array([[ 8.,  8.],[ 0.,  0.],[ 1.,  8.],[ 0.,  4.]])
>>> np.hstack((a,b))
array([[ 8.,  8.,  1.,  8.],[ 0.,  0.,  0.,  4.]])

该函数将column_stack 1D数组作为列堆叠到2D数组中。它仅相当于 hstack2D数组:

>>> from numpy import newaxis
>>> np.column_stack((a,b))     # with 2D arrays
array([[ 8.,  8.,  1.,  8.],[ 0.,  0.,  0.,  4.]])
>>> a = np.array([4.,2.])
>>> b = np.array([3.,8.])
>>> np.column_stack((a,b))     # returns a 2D array
array([[ 4., 3.],[ 2., 8.]])
>>> np.hstack((a,b))           # the result is different
array([ 4., 2., 3., 8.])
>>> a[:,newaxis]               # this allows to have a 2D columns vector
array([[ 4.],[ 2.]])
>>> np.column_stack((a[:,newaxis],b[:,newaxis]))
array([[ 4.,  3.],[ 2.,  8.]])
>>> np.hstack((a[:,newaxis],b[:,newaxis]))   # the result is the same
array([[ 4.,  3.],[ 2.,  8.]])

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

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

相关文章

formality:set_constant应用

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: formality:形式验证流程 scan mode func的功能检查需要把scan mode设置成0。

Django 模板使用方法

1.runoob.html 文件代码如下&#xff1a; <h1>{{ hello }}</h1> 2.修改HelloWorld/settings.py&#xff0c;修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, templates)]&#xff0c;如下所示 settings.py 文件代码&#xff1a; TEMPLATES [ { …

vue页面菜单权限问题解决

带锚点的url,#后面部分后端获取不到. vue的页面是带有#的路由,#后端服务获取不到,只在浏览器端有用. URL 中的哈希符号 (#) 被用来作为网页中的 锚点 使用&#xff0c;锚点的含义就是页面中的某个特定的位置&#xff0c;这个位置可以被快速找到&#xff0c;很类似于在该位置抛…

LeetCode 2670.找出不同元素数目差数组

给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, n - 1] 中不同元素的数目。 返回 nums 的 不…

请求包的大小会影响Redis每秒处理请求数量

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容压测规划客户端长连接数量对性能的影响请求包大小的影响Pipleline模式对Redis的影响 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领…

第 2 章 微信小程序的构成 (代码导读)断更,后续继续更新

2.1 小程序项目的基本结构 Hello World&#xff01;程序.mp4 文泉云盘 -- 图书二维码资源管理系统兆泰源二维码管理系统https://www.wqyunpan.com/resourceDetail.html?id284928&openIdoUgl9wdyNYHu9EcAe-GEwbQdZilY&qrcodeId242916&signc2lnbm1PUmNxSndPWGFOck…

51.仿简道云公式函数实战-文本函数-JOIN

1. JOIN函数 JOIN 函数可通过连接符将数组的值连成文本。 2. 函数用法 JOIN(数组,"连接符") 3. 函数示例 如需将复选框中勾选的选项通过”-“组合在一起&#xff0c;则可设置公式为JOIN(复选框组,"-") 4. 代码实战 首先我们在function包下创建text包…

【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II

作者推荐 动态规划的时间复杂度优化 本文涉及的基础知识点 C算法&#xff1a;滑动窗口总结 数据结构 双堆 LeetCode3013. 将数组分成最小总代价的子数组 II 给你一个下标从 0 开始长度为 n 的整数数组 nums 和两个 正 整数 k 和 dist 。 一个数组的 代价 是数组中的 第一个…

JSON简介以及如何在Python中使用JSON

什么是JSON&#xff1f; JSON是"JavaScript Object Notation"的简称&#xff0c;是一种数据交换格式 JSON格式 假设我们有一个对象&#xff0c;这个对象有两个属性&#xff1a;“name”跟“age”。 在JSON中是这样表达的&#xff1a; { "name":"男孩…

vulnhub----hackme2-DHCP靶机

文章目录 一&#xff0c;信息收集1.网段探测2.端口扫描3.目录扫描 二&#xff0c;信息分析三&#xff0c;sql注入1.判断SQL注入2.查询显示位3.查询注入点4.查询库5.查询表6.查字段7. 查user表中的值8.登陆superadmin用户 四&#xff0c;漏洞利用文件上传命令执行蚁剑连接 五&am…

【深入理解设计模式】桥接设计模式

桥接设计模式 桥接设计模式是一种结构型设计模式&#xff0c;它旨在将抽象部分与实现部分分离&#xff0c;使它们可以独立变化&#xff0c;从而更好地管理复杂性。桥接模式通常涉及多个层次的抽象&#xff0c;其中一个层次&#xff08;通常称为"抽象"&#xff09;依…

防御保护----内容安全

八.内容安全--------------------------。 IAE引擎&#xff1a; IAE引擎里面的技术&#xff1a;DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包&#xff08;数据包分片&#xff0c;分段需要重组&#xff09;&#xff0c;之后对 数据包的内容进行…

【leetcode热题】三角形最小路径和

难度&#xff1a; 中等通过率&#xff1a; 37.6%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个三角形&#xff0c;找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如&#xff0c;给定三角形&#xff1a; [[2],[3…

goland配置新增文件头

参考&#xff1a; goland函数注释生成插件 goland函数注释生成插件_goland自动加函数说明-CSDN博客 GoLand 快速添加方法注释 GoLand 快速添加方法注释_goland批量注释-CSDN博客 goland 如何设置头注释&#xff0c;自定义author和data goland 如何设置头注释&#xff0c;自定…

Web JavaScript

目录 1 前言2 原生js常见用法2.1 弹窗操作2.2 for循环操作2.3 打印日志操作2.4 获取页面值操作2.5 判空操作2.6 修改页面内容操作2.7 网页版计算器制作 3 外部js常见用法4 总结 1 前言 JavaScript 是一种脚本&#xff0c;一门编程语言&#xff0c;它可以在网页上实现复杂的功能…

如何理解Rust中的对象

先看看下面2段代码&#xff0c;第1段代码正常&#xff0c;第2段却编译失败&#xff0c;为什么呢&#xff1f; fn main() {let a: u32 5;let b a;println!("a{a}, b{b}"); }正常 fn main() {let a String::from("Hello");let b a;println!("a{a}…

python中如何引用正则表达式?

无极低码 &#xff1a;https://wheart.cn 引言 正则表达式&#xff08;Regular expressions&#xff0c;也叫 REs、 regexs 或 regex patterns&#xff09;&#xff0c;本质上是嵌入 Python 内部并通过 re 模块提供的一种微小的、高度专业化的编程语言。使用这种小语言&#…

事件循环解析

浏览器的进程模型 何为进程&#xff1f; 程序运行需要有它自己专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程 每个应用至少有一个进程&#xff0c;进程之间相互独立&#xff0c;即使要通信&#xff0c;也需要双方同意。 何为线程&#xff1f; 有了进程后&…

8.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-游戏底层功能对接类GameProc的实现

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;通过逆向分析确定游戏明文接收数据过程 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan 码云版本号&#xff1a;bcf7559184863febdcad819e48aa…

python number类型中的各种数学函数

python中的数学函数 函数返回值 ( 描述 )abs(x)返回数字的绝对值&#xff0c;如abs(-10) 返回 10ceil(x)返回数字的上入整数&#xff0c;如math.ceil(4.1) 返回 5cmp(x, y)如果 x < y 返回 -1, 如果 x y 返回 0, 如果 x > y 返回 1。Python 3 已废弃&#xff0c;使用 (…