iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python NumPy教程之索引详解
  • 525
分享到

Python NumPy教程之索引详解

2024-04-02 19:04:59 525人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录为什么我们需要 NumPy 使用索引数组进行索引索引类型基本切片和索引高级索引NumPy 或 Numeric python 是一个用于计算同质 n 维数组的包。在 nu

NumPy 或 Numeric python 是一个用于计算同质 n 维数组的包。在 numpy 维度中称为轴。

为什么我们需要 NumPy 

出现了一个问题,当 Python 列表已经存在时,为什么我们需要 NumPy。答案是我们不能直接对两个列表的所有元素执行操作。例如,我们不能直接将两个列表相乘,我们必须逐个元素地进行。这就是 NumPy 发挥作用的地方。

示例 #1:

# 演示需要 NumPy 的 Python 程序
 
list1 = [1, 2, 3, 4 ,5, 6]
list2 = [10, 9, 8, 7, 6, 5]
 
# 将两个列表直接相乘会出错。
print(list1*list2)

输出 :

TypeError: can't multiply sequence by non-int of type 'list'

因为这可以通过 NumPy 数组轻松完成。

示例 #2:

# 演示 NumPy 数组使用的 Python 程序
import numpy as np
 
list1 = [1, 2, 3, 4, 5, 6]
list2 = [10, 9, 8, 7, 6, 5]
 
# 将 list1 转换为 NumPy 数组
a1 = np.array(list1)
 
# 将 list2 转换为 NumPy 数组
a2 = np.array(list2)
 
print(a1*a2)

输出 :

array([10, 18, 24, 28, 30, 30])

python的numpy包具有以不同方式索引的强大功能。

使用索引数组进行索引

索引可以通过使用数组作为索引在 numpy 中完成。在切片的情况下,返回数组的视图或浅表副本,但在索引数组中返回原始数组的副本。Numpy 数组可以用其他数组或任何其他序列索引,但元组除外。最后一个元素由 -1 索引,第二个由 -2 索引,依此类推。

示例 #1:

# 演示索引数组使用的 Python 程序。
import numpy as np
 
# 创建一个从 10 到 1 的整数序列,步长为 -2
a = np.arange(10, 1, -2) 
print("\n A sequential array with a negative step: \n",a)
 
# 索引在 np.array 方法中指定。
newarr = a[np.array([3, 1, 2 ])]
print("\n Elements at these indices are:\n",newarr)

输出 :

A sequential array with a negative step:
[10  8  6  4  2]

Elements at these indices are:
[4 8 6]

示例 #2:

import numpy as np
 
# 元素从 1 到 9 的 NumPy 数组
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
 
# 索引值可以是负数。
arr = x[np.array([1, 3, -3])]
print("\n Elements are : \n",arr)

输出 :

Elements are:
[2 4 7]

索引类型

有两种类型的索引:

基本切片和索引

考虑语法 x[obj],其中 x 是数组,obj 是索引。切片对象是基本切片情况下的索引。当 obj 为 时发生基本切片:

  • 形式为 start : stop : step 的切片对象
  • 一个整数
  • 或切片对象和整数的元组

基本切片生成的所有数组始终是原始数组的视图。

代码#1:

# 用于基本切片的 Python 程序。
import numpy as np
 
# 从 0 到 19 排列元素
a = np.arange(20)
print("\n Array is:\n ",a)
 
# a[start:stop:step]
print("\n a[-8:17:1]  = ",a[-8:17:1]) 
 
# : 运算符表示直到最后的所有元素。
print("\n a[10:]  = ",a[10:])

输出 :

Array is:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]

a[-8:17:1]  =  [12 13 14 15 16]

a[10:] = [10 11 12 13 14 15 16 17 18 19] 

代码#2:

# 用于基本切片和索引的 Python 程序
import numpy as np
 
# A 3-Dimensional array
a = np.array([[0, 1, 2, 3, 4, 5]
              [6, 7, 8, 9, 10, 11]
              [12, 13, 14, 15, 16, 17]
              [18, 19, 20, 21, 22, 23]
              [24, 25, 26, 27, 28, 29]
              [30, 31, 32, 33, 34, 35]]
print("\n Array is:\n ",a)
 
# 切片和索引
print("\n a[0, 3:5]  = ",a[0, 3:5]) 
 
print("\n a[4:, 4:]  = ",a[4:, 4:]) 
 
print("\n a[:, 2]  = ",a[:, 2]) 
 
print("\n a[2:;2, ::2]  = ",a[2:;2, ::2]) 

输出 :

Array is:
 [[0  1  2  3  4  5] 
  [6 7 8 9 10 11]
  [12 13 14 15 16 17]
  [18 19 20 21 22 23]
  [24 25 26 27 28 29]
  [30 31 32 33 34 35]]

a[0, 3:5]  =  [3 4]

a[4:, 4:] = [[28 29],
             [34 35]]

a[:, 2] =  [2 8 14 20 26 32]

a[2:;2, ::2] = [[12 14 16],
                [24 26 28]]

下图让概念更清晰:

省略号也可以与基本切片一起使用。省略号 (...) 是 : 对象的数量,需要创建一个长度与数组维度相同的选择元组。

# 使用带省略号的基本切片进行索引的 Python 程序
import numpy as np
 
# A 3 dimensional array.
b = np.array([[[1, 2, 3],[4, 5, 6]],
              [[7, 8, 9],[10, 11, 12]]])
 
print(b[...,1]) #Equivalent to b[: ,: ,1 ]

输出 :

[[ 2 5] 
 [ 8 11]]

高级索引

当 obj 为 - 时触发高级索引

  • 整数或布尔类型的 ndarray
  • 或具有至少一个序列对象的元组
  • 是一个非元组序列对象

高级索引返回数据的副本而不是它的视图。高级索引有整数和布尔两种类型。

纯整数索引: 当整数用于索引时。第一维的每个元素都与第二维的元素配对。所以本例中元素的索引为 (0,0),(1,0),(2,1) 并选择相应的元素。

# 显示高级索引的 Python 程序
import numpy as np
 
a = np.array([[1 ,2 ],[3 ,4 ],[5 ,6 ]])
print(a[[0 ,1 ,2 ],[0 ,0 ,1]])

输出 :

[1 3 6]

结合高级索引和基本索引

当索引中至少有一个切片 (:)、省略号 (...) 或 newaxis 时(或者数组的维度多于高级索引),则行为可能会更复杂。这就像连接每个高级索引元素的索引结果

在最简单的情况下,只有一个高级索引。例如,单个高级索引可以替换切片,结果数组将是相同的,但是,它是一个副本并且可能具有不同的内存布局。如果可能,切片是优选的。

# 显示高级和基本索引的 Python 程序
import numpy as np
 
a = np.array([[0 ,1 ,2],[3 ,4 ,5 ],
              [6 ,7 ,8],[9 ,10 ,11]])
 
print(a[1:2 ,1:3 ])
print(a[1:2 ,[1,2]])

输出 :

[4, 5] 
[4, 5]

了解情况的最简单方法可能是根据结果形状进行思考。索引操作有两个部分,由基本索引(不包括整数)定义的子空间和来自高级索引部分的子空间。需要区分两种索引组合的情况:

高级索引由切片、省略号或 newaxis 分隔。例如x[arr1, :, arr2].

高级索引都彼此相邻。例如x[..., arr1, arr2, :],但不是x[arr1, :, 1] 因为 1 在这方面是一个高级索引。

在第一种情况下,高级索引操作产生的维度首先出现在结果数组中,然后是子空间维度。在第二种情况下,来自高级索引操作的维度被插入到结果数组中与它们在初始数组中相同的位置(后一种逻辑使简单的高级索引的行为就像切片一样)。

布尔数组索引

这个索引有一些布尔表达式作为索引。返回满足该布尔表达式的那些元素。它用于过滤所需的元素值。

代码 #1

# 您可能希望选择大于 50 的数字
import numpy as np
 
a = np.array([10, 40, 80, 50, 100])
print(a[a>50])

输出 :

[80 100]

代码 #2

# 您可能希望将 40 的倍数平方
import numpy as np
 
a = np.array([10, 40, 80, 50, 100])
print(a[a%40==0]**2)

输出 :

[1600 6400])

代码 #3

# 您可能希望选择行之和是 10 的倍数的那些元素。
import numpy as np
 
b = np.array([[5, 5],[4, 5],[16, 4]])
sumrow = b.sum(-1)
print(b[sumrow%10==0])

输出 :

array([[ 5, 5], [16, 4]])

到此这篇关于Python NumPy教程之索引详解的文章就介绍到这了,更多相关Python Numpy索引内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python NumPy教程之索引详解

本文链接: https://www.lsjlt.com/news/120192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python NumPy教程之索引详解
    目录为什么我们需要 NumPy 使用索引数组进行索引索引类型基本切片和索引高级索引NumPy 或 Numeric Python 是一个用于计算同质 n 维数组的包。在 nu...
    99+
    2022-11-11
  • Python NumPy教程之二元计算详解
    二元运算符作用于位,进行逐位运算。二元运算只是组合两个值以创建新值的规则。 numpy.bitwise_and(): 此函数用于计算两个数组元素的按位与。 此函数计算输入数组中整数的...
    99+
    2022-11-11
  • Python NumPy教程之数组的创建详解
    本篇文章给大家带来了关于Python的相关知识,主要为大家详细介绍了Python NumPy中数组的创建方式,文中的示例代码讲解详细,对我们学习Python有一定帮助,需要的可以参考一下。【相关推荐:Python3视频教程 】使用 List...
    99+
    2022-08-26
  • Python NumPy教程之数据类型对象详解
    每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。这意味着它为我们提供了以下信息: 数据类型(整数、浮点数、Pyt...
    99+
    2022-11-11
  • Python NumPy教程之数组的基本操作详解
    目录Numpy中的N维数组(ndarray)数组创建数组索引基本操作数据类型Numpy中的N维数组(ndarray) Numpy 中的数组是一个元素表(通常是数字),所有元素类型相同...
    99+
    2022-11-11
  • ElasticSearch之索引模板滚动索引实现详解
    目录一. 前言二. 索引三. 索引模板3.1 索引模板的创建3.2 索引模板 Setting3.3 索引映射 :mapping四. 业务功能4.1 创建滚动索引4.2 创建和绑定策略...
    99+
    2023-05-16
    ElasticSearch索引模板滚动索引 ElasticSearch索引
  • python基础知识之索引与切片详解
    目录基本索引嵌套索引切片numpy.array 索引 一维numpy.array 索引 二维pandas Series 索引pandas DataFrame 索引填坑总结基本索引 I...
    99+
    2022-11-13
  • MySQL数据库之索引详解
    目录一、MySQL索引简介二、MySQL五种类型索引详解(一)普通索引(二)唯一性索引(三)主键索引(四)复合索引(五)全文索引三、MySQL索引使用原则总结今天继续给大家介绍MyS...
    99+
    2022-11-12
  • PythonNumpy教程之排序,搜索和计数详解
    目录排序搜索Counting排序 排序是指以特定格式排列数据。排序算法指定以特定顺序排列数据的方式。最常见的顺序是数字或字典顺序。在 Numpy 中,我们可以使用库中提供的各种函数(...
    99+
    2022-11-11
  • Python教程之类型转换详解
    目录隐式类型转换显式类型转换Python 定义了类型转换函数以将一种数据类型直接转换为另一种数据类型,这在日常和竞争性编程中很有用。本文旨在提供有关某些转换函数的信息。 Python...
    99+
    2022-11-11
  • Python探索之SocketServer详解
    SocketServer,网络通信服务器,是Python标准库中的一个模块,其作用是创建网络服务器。SocketServer模块定义了一些类来处理诸如TCP、UDP、UNIX流和UNIX数据报之上的同步网络...
    99+
    2022-06-05
    详解 Python SocketServer
  • Python Numpy库的超详细教程
    1、Numpy概述 1.1 概念 Python本身含有列表和数组,但对于大数据来说,这些结构是有很多不足的。由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针。对于数值运算...
    99+
    2022-11-10
  • Pythonpandas之多级索引取值详解
    目录数据需求需求拆解需求处理方法一方法二总结最近发现周围的很多小伙伴们都不太乐意使用pandas,转而投向其他的数据操作库,身为一个数据工作者,基本上是张口pandas,闭口pand...
    99+
    2022-11-12
  • SQL server 数据库之“索引”详解
    什么是索引?数据库中的索引与书籍中的目录类似,索引使SQL Server编排数据的内部方法,它为SQL Server提供一种方法来编排查询数据的路由。 索引页是数据中存储索引的数据页。索引页存放检索数据...
    99+
    2022-10-18
  • 详解MySQL 8.0 之不可见索引
    言 MySQL 8.0 从第一版release 到现在已经走过了4个年头了,8.0版本在功能和代码上做了相当大的改进和重构。和DBA圈子里的朋友交流,大部分还是5.6 ,5.7的版本,少量的走的比较靠前采用了MySQ...
    99+
    2022-05-27
    MySQL8.0 不可见索引 MySQL 不可见索引 MySQL 索引
  • 【MySQL进阶教程】 索引详细介绍
    前言 本文为 【MySQL进阶教程】 索引 相关知识介绍,下边具体将对索引概述,索引结构(包括:索引结构概述,二叉树,B-Tree,B+Tree,Hash),索引分类,索引语法(包括:创建索引,查看...
    99+
    2023-10-03
    mysql java 数据库
  • mysql之explain使用详解(分析索引)
    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了,如: ex...
    99+
    2022-10-18
  • python 全文检索引擎详解
    python 全文检索引擎详解 最近一直在探索着如何用Python实现像百度那样的关键词检索功能。说起关键词检索,我们会不由自主地联想到正则表达式。正则表达式是所有检索的基础,python中有个re类,是专...
    99+
    2022-06-04
    详解 引擎 全文
  • Python科学计算之NumPy入门教程
    前言 NumPy是Python用于处理大型矩阵的一个速度极快的数学库。它允许你在Python中做向量和矩阵的运算,而且很多底层的函数都是用C写的,你将获得在普通Python中无法达到的运行速度。这是由于矩...
    99+
    2022-06-04
    入门教程 科学 Python
  • Python NumPy教程之数据类型对象
    本篇文章给大家带来了关于Python的相关知识,每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。下面将通过示例详细讲讲NumPy的数据类型对象,需要的可以参考一下。【相关...
    99+
    2022-08-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作