数据分析必备:一步步教你如何用numpy改变数据处理(5)

介绍:
NumPy是Python中用于数值计算的一个非常强大的库,它提供了高效的N维数组对象和丰富的数学函数。在数据分析和科学计算领域,使用NumPy可以极大地提高编程效率和运算速度。以下是对NumPy的切片和索引操作的介绍:

  1. 解释说明
  • NumPy中的切片是指从一个多维数组中提取一部分元素,形成一个新的数组或视图。切片操作不需要循环遍历每个元素,而是通过指定起始、结束和步长来选择数据。
  • 索引则是通过指定元素的索引位置来访问或修改数组中的元素。NumPy支持基本切片、高级索引和字段访问等多种索引方式。
  1. 使用示例
  • 基本切片:arr[start:stop:step],其中start是起始索引,stop是结束索引(不包含),step是步长。例如,import numpy as np; arr = np.array([0, 1, 2, 3, 4]); print(arr[1:3])将输出[1, 2]
  • 高级索引:可以使用一个索引数组来选择多个维度上的元素,例如arr[[0, 2], [1, 3]]将输出[[0, 1], [2, 3]]
  • 字段访问:对于结构化数组,可以通过字段名来访问特定的数据,例如arr[['field1', 'field2']]
  1. 注意事项
  • 在进行切片操作时,如果省略startstopstep中的任何一个参数,NumPy会使用默认值来填充。例如,arr[:3]等价于arr[0:3:1]
  • 高级索引时,返回的是原数组的视图,这意味着对返回的数组进行修改会影响到原数组。
  • 当使用负数索引时,表示从数组末尾开始计数,如arr[-1]将访问数组的最后一个元素。
  • 在使用切片和索引时,应确保索引范围有效,避免出现索引错误。
    NumPy的切片和索引是处理数组数据时不可或缺的工具,它们提供了灵活而高效的方式来访问和操作数组中的数据。掌握这些基础操作对于进行有效的数据分析和科学计算至关重要。

1、NumPy 切片和索引

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

import numpy as np
a = np.arange(10)
s = slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print (a[s])

输出结果为:

[2  4  6]

以上实例中,我们首先通过 arange() 函数创建 ndarray 对象。 然后,分别设置起始,终止和步长的参数为 2,7 和 2。
我们也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:

import numpy as np
a = np.arange(10)  
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)

输出结果为:

[2  4  6]

冒号 : 的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

import numpy as np
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
b = a[5] 
print(b)

输出结果为:

5
import numpy as np
a = np.arange(10)
print(a[2:])

输出结果为:

[2  3  4  5  6  7  8  9]
import numpy as np
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
print(a[2:5])

输出结果为:

[2  3  4]

多维数组同样适用上述索引提取方法:

import numpy as npa = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])

输出结果为:

[[1 2 3][3 4 5][4 5 6]]
从数组索引 a[1:] 处开始切割
[[3 4 5][4 5 6]]

切片还可以包括省略号 …,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下的所有元素

输出结果为:

[2 4 5]
[3 4 5]
[[2 3][4 5][5 6]]

2、NumPy 高级索引

NumPy 比一般的 Python 序列提供更多的索引方式。
除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。
NumPy 中的高级索引指的是使用整数数组、布尔数组或者其他序列来访问数组的元素。相比于基本索引,高级索引可以访问到数组中的任意元素,并且可以用来对数组进行复杂的操作和修改。

2.1、整数数组索引

整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。
以下实例获取数组中 (0,0),(1,1) 和 (2,0) 位置处的元素。

import numpy as np 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
print (y)

输出结果为:

[1  4  5]

以下实例获取了 4X3 数组中的四个角的元素。 行索引是 [0,0] 和 [3,3],而列索引是 [0,2] 和 [0,2]。

import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是:' )
print (x)
print ('\n')
rows = np.array([[0,0],[3,3]]) 
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols]  
print  ('这个数组的四个角元素是:')
print (y)

输出结果为:

我们的数组是:
[[ 0  1  2][ 3  4  5][ 6  7  8][ 9 10 11]]
这个数组的四个角元素是:
[[ 0  2][ 9 11]]

返回的结果是包含每个角元素的 ndarray 对象。
可以借助切片 : 或 … 与索引数组组合。如下面例子:

import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)

输出结果为:

[[5 6][8 9]]
[[5 6][8 9]]
[[2 3][5 6][8 9]]

2.2、布尔索引

我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
以下实例获取大于 5 的元素:

import numpy as np 
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print ('我们的数组是:')
print (x)
print ('\n')
# 现在我们会打印出大于 5 的元素  
print  ('大于 5 的元素是:')
print (x[x >  5])

输出结果为:

我们的数组是:
[[ 0  1  2][ 3  4  5][ 6  7  8][ 9 10 11]]大于 5 的元素是:
[ 6  7  8  9 10 11]

以下实例使用了 ~(取补运算符)来过滤 NaN。

import numpy as np 
a = np.array([np.nan,  1,2,np.nan,3,4,5])  
print (a[~np.isnan(a)])

输出结果为:

[ 1.   2.   3.   4.   5.]

以下实例演示如何从数组中过滤掉非复数元素。

import numpy as np 
a = np.array([1,  2+6j,  5,  3.5+5j])  
print (a[np.iscomplex(a)])

输出如下:

[2.0+6.j  3.5+5.j]

2.3、花式索引

花式索引指的是利用整数数组进行索引。
花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素,如果目标是二维数组,那么就是对应下标的行。
花式索引跟切片不一样,它总是将数据复制到新数组中。
一维数组
一维数组只有一个轴 axis = 0,所以一维数组就在 axis = 0 这个轴上取值:

import numpy as np
x = np.arange(9)
print(x)
# 一维数组读取指定下标对应的元素
print("-------读取下标对应的元素-------")
x2 = x[[0, 6]] # 使用花式索引
print(x2)
print(x2[0])
print(x2[1])

输出结果为:

[0 1 2 3 4 5 6 7 8]
-------读取下标对应的元素-------
[0 6]
0
6

二维数组
1、传入顺序索引数组

import numpy as np 
x=np.arange(32).reshape((8,4))
print(x)
# 二维数组读取指定下标对应的行
print("-------读取下标对应的行-------")
print (x[[4,2,1,7]])

print (x[[4,2,1,7]]) 输出下表为 4, 2, 1, 7 对应的行,输出结果为:

[[ 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]]
-------读取下标对应的行-------
[[16 17 18 19][ 8  9 10 11][ 4  5  6  7][28 29 30 31]]

2、传入倒序索引数组

import numpy as np 
x=np.arange(32).reshape((8,4))
print (x[[-4,-2,-1,-7]])

输出结果为:

[[16 17 18 19][24 25 26 27][28 29 30 31][ 4  5  6  7]]

3、传入多个索引数组(要使用 np.ix_)
np.ix_ 函数就是输入两个数组,产生笛卡尔积的映射关系。
笛卡尔乘积是指在数学中,两个集合 X 和 Y 的笛卡尔积(Cartesian product),又称直积,表示为 X×Y,第一个对象是X的成员而第二个对象是 Y 的所有可能有序对的其中一个成员。
例如 A={a,b}, B={0,1,2},则:

A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
import numpy as np 
x=np.arange(32).reshape((8,4))
print (x[np.ix_([1,5,7,2],[0,3,1,2])])

输出结果为:

[[ 4  7  5  6][20 23 21 22][28 31 29 30][ 8 11  9 10]]

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

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

相关文章

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么? 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

《21天学通C++》(第十四章) 宏和模板介绍(1)

1.使用#define定义常量 例子 #include <iostream> #include <string> using namespace std;#define ARRAY_LENGTH 25 #define PI 3.1415 #define MY_DOUBLE double #define FAV_WHISKY "Jack"int main() {int number [ARRAY_LENGTH]{0};cout<<&q…

AI神助攻!小白也能制作自动重命名工具~

我们平时从网上下载一些文件&#xff0c;文件名很多都是一大串字母和数字&#xff0c;不打开看看&#xff0c;根本不知道里面是什么内容。 我想能不能做个工具&#xff0c;把我们一个文件夹下面的所有word、excel、ppt、pdf文件重命名为文件内容的第一行。 我们有些朋友可能不会…

全国33个省228189个矿产地位置分布数据,含经纬度坐标/CSV格式

全国矿产地分布&#xff08;2021版&#xff09; 数据来源&#xff1a; 全国矿产地数据库2021版 (ngac.org.cn) http://data.ngac.org.cn/mineralresource/index.html 数据获取方法&#xff1a;树谷资料库大全&#xff08;2024年4月19日更新&#xff09; 进入网站后&#xf…

【华为】路由策略小实验

【华为】软考中级-路由策略实验 实验需求拓扑配置AR1AR2需求1需求2 AR3 检验 实验需求 1、让 R3 可以学到R1的 192.168.10.0/24和192.168.20.0/24的 路由&#xff0c;不能学到192.168.30.0/24。 2、让 R1可以学到 R3 的 172.16.20.0/24和172.16.30.0/24的路由&#xff0c;不能…

OSTEP Projects:Reverse

本文将介绍操作系统导论&#xff08;Operating Systems: Three Easy Pieces&#xff09;作者所开源的操作系统相关课程项目 的 Reverse 部分&#xff0c;包含个人的代码实现和设计思路。 思路 题目的要求很简单&#xff1a;按行读取数据&#xff0c;读取完成后将所读取到的所有…

75.网络游戏逆向分析与漏洞攻防-角色与怪物信息的更新-伪造服务端更新属性消息欺骗客户端

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

wordpress外贸网站建设主机选择的注意事项

在为WordPress外贸网站建设选择主机时&#xff0c;您需要注意以下几点&#xff1a; 服务器地理位置&#xff1a; 选择一个靠近目标客户群的服务器位置&#xff0c;这将有助于提高网站的加载速度和可靠性。通常&#xff0c;如果您的目标客户群是国外用户&#xff0c;建议选择美…

UE5(射线检测)学习笔记

这一篇会讲解射线检测点击事件、离开悬停、进入悬停事件的检测&#xff0c;以及关闭射线检测的事件&#xff0c;和射线检测蓝图的基础讲解。 创建一个简单的第三人称模板 创建一个射线检测的文件夹RadiationInspection&#xff0c;并且右键蓝图-场景组件-命名为BPC_Radiation…

语音识别简介

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

MySQL没有初始化配置文件设置属性

情况描述 安装mysql的时候&#xff0c;为了速度&#xff0c;并没有配置my.ini或者my.cnf文件&#xff0c;数据库因为断电&#xff0c;导致数据都看不见了&#xff0c;一直提示不存在&#xff0c;这时候需要修改配置文件&#xff0c;将innodb_force_recovery设置为0到6的值&…

淘宝商品评论数据获取:从API调用到应用实践

在电商的世界里&#xff0c;用户评论是洞察商品质量的一扇窗。淘宝&#xff0c;作为中国最大的在线购物平台&#xff0c;其海量的商品评论数据尤为宝贵。本文将带您走进淘宝商品评论数据的获取之旅&#xff0c;从API调用的基础知识到实际应用的代码示例&#xff0c;一探究竟。 …

Pycharm debug 运行报错 (RuntimeError: cannot release un-acquired lock)

问题描述&#xff1a; 最近再跑一个 flask应用&#xff0c;Pycharm 运行没问题&#xff0c;debug断点启动时报错 如下&#xff1a; 解决方案&#xff1a; 在环境变量中增加 GEVENT_SUPPORTTrue 启动成功&#xff01;

[激光原理与应用-92]:振镜的光路图原理

目录 一、振镜的光路 二、振镜的工作原理 2.1 概述 2.2 焊接头 2.3 准直聚焦头-直吹头 2.4 准直聚焦头分类——按应用分 2.4.1 准直聚焦头分类——功能分类 2.4.2 准直聚焦头镜片 2.4.3 振镜焊接头 2.4.4 振镜分类&#xff1a; 2.4.5 动态聚焦系统演示&#xff08;素…

MQ如何保证可靠性

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;MQ ⛺️稳中求进&#xff0c;晒太阳 消息到达MQ以后&#xff0c;如果MQ不能及时保存&#xff0c;也会导致消息丢失&#xff0c;所以MQ的可靠性也非常重要。 2.数据持久化 为了提高性能&a…

被苹果商店打回20多个包,App Store都干了啥!

本次被拒的App涉及金融、教育、游戏等各个领域&#xff0c;其中既有首发产品也有更新产品&#xff0c;原因多涉及疑似切支付、马甲包等问题&#xff1b;不过也有部分开发者反映遭到”误伤”&#xff0c;正常包体也被打回。 从今年1月底开始&#xff0c;许多开发者发现在向苹果…

Typescript语法二

继承 继承是⾯向对象编程中的重要机制&#xff0c;允许⼀个类&#xff08;⼦类或派⽣类&#xff09;继承另⼀个类&#xff08;⽗类或基类&#xff09;的属性和⽅法。⼦类可以直接使⽤⽗类的特性&#xff0c;并根据需要添加新的特性或覆盖现有的特性。这种机制赋予⾯向对象程序良…

头歌 实验六 Java流式编程与网络程序设计

实验六 Java流式编程与网络程序设计 制作不易&#xff01;点个关注&#xff0c;给大家带来更多的价值 第1关 字节输入/输出流实现数据的保存和读取 package step1;import java.io.*; import java.util.*;public class SortArray {public static void main(String[] args) {/…

getchar和putchar函数详解

getchar和putchar函数详解 1.getchar函数1.1函数概述1.2函数返回值1.3函数注意事项1.4函数的使用 2.putchar函数2.1函数概述2.2函数返回值2.3函数使用实例 1.getchar函数 1.1函数概述 从一个流中读取一个字符&#xff0c;或者从标准输入中获得一个字符 函数原型&#xff1a; …

Sa-Token框架入门使用

说明&#xff1a;Sa-Token是一个轻量级java权限认证框架&#xff08;官方语&#xff09;&#xff0c;所谓权限认证框架&#xff0c;就是登录框架&#xff0c;像Shiro、Spring Security。本文介绍Sa-Token框架的入门使用&#xff0c;基于Spring Boot环境。 准备工作 首先&…