python数据分析(三) python numpy--数组--运算,切片和索引
Numpy数组的运算:
numpy数组最大的特点是任何运算,都会自动的对数组当中的所有变量进行运算,所以千万不要试图自己去使用循环去取数组当中的值进行运算(非常愚蠢)。
1.相同大小的数组之间的运算
数组可以不编写循环而对数据执行批量运算,称之为矢量化,大小相同数组之间的算术运算将会应用到元素级。
In [51]: arr = np.array([[1., 2., 3.], [4., 5., 6.]]) In [52]: arr Out[52]: array([[ 1.,2.,3.], [ 4.,5.,6.]]) In [53]: arr * arr Out[53]: array([[1.,4.,9.], [ 16.,25.,36.]]) In [54]: arr - arr Out[54]: array([[ 0.,0.,0.], [ 0.,0.,0.]])
2.大小不同的数组之间的运算
大小不同的数组之间的运算叫做广播,本教程暂时不涉及该内容。
3.标量与数组之间的运算
数组与标量值之间的运算,会将标量值传播到各个元素
In [55]: 1 / arr Out[55]: array([[ 1.,0.5,0.3333], [ 0.25,0.2,0.1667]]) In [56]: arr ** 0.5 Out[56]: array([[ 1.,1.4142,1.7321], [ 2.,2.2361,2.4495]])
Numpy数组的索引和切片
keypoint:
1.Numpy的切片非常重要的一点是,numpy的切片是原数组的视图,而不是副本,这也就意味着对于切片的赋值和修改会直接反映到原数组当中,这样设计的目的是由于,由于numpy处理的都是大数据,如果需要复制的话会对内存造成多大的压力。
2.Numpy多维数组当中最常见的是二维数组,我们日常工作当中也主要是对二维数组进行操作,Numpy当中的轴是数组很重要的概念。0代表纵轴也就是行伸展的方向,numpy当中默认axis=0,也是基于日常数据处理通常是逐行进行数据处理,1代表横轴,是列的伸展,需要对列进行操作时,通常需要指定axis=1。
一维数组
一维数组的索引和切片与python当中的列表差不多
In [60]: arr = np.arange(10) In [61]: arr Out[61]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [62]: arr[5] Out[62]: 5 In [63]: arr[5:8] Out[63]: array([5, 6, 7]) In [64]: arr[5:8] = 12 In [65]: arr Out[65]: array([ 0,1,2,3,4, 12, 12, 12,8,9])
多维数组
以二维数组为例
索引
单行索引
当你想要获取二维数组的某一行(注意是仅是单行)可以使用arr[],同时假如需要该行当中的某一列时可以采用arr[2][3]或者arr[2,3] 这两者是等价的
In [10]: data Out[10]: array([[ 1.0788974 , 0.68102429, 1.25657144, 0.86003818], [ 0.12736723, -1.02105407, -1.73882805, -0.95977831], [ 1.72637531, 1.34888078, -0.30239276, -0.2500709 ], [ 1.35099747, -1.548361 , 0.42033975, -0.45966589], [-1.33488847, 0.03941755, 1.62740521, 1.06397523], [ 0.24654034, -1.78687642, -1.48406199, 0.26911715], [-1.51003484, -0.00391514, 1.0792482 , 1.4810209 ]]) In [15]: data[0] Out[15]: array([1.0788974 , 0.68102429, 1.25657144, 0.86003818]) In [16]: data[0,2,4,6] --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-16-6d104e373c35> in <module> ----> 1 data[0,2,4,6] IndexError: too many indices for array
In [17]: data[0][2] Out[17]: 1.25657144416686 In [18]: data[0,2] Out[18]: 1.25657144416686
多行索引
当你需要数组其中的多行时,需要使用[[]]来制定需要的行
In [14]: data[[0,2,4,6]] Out[14]: array([[ 1.0788974 , 0.68102429, 1.25657144, 0.86003818], [ 1.72637531, 1.34888078, -0.30239276, -0.2500709 ], [-1.33488847, 0.03941755, 1.62740521, 1.06397523], [-1.51003484, -0.00391514, 1.0792482 , 1.4810209 ]])
同时很是特殊的一点是,当你想要其中的一些行与列时,你可能想到这样使用:arr[[1, 5, 7, 2], [0, 3, 1, 2]],但是你会发现得到是一个一维数组
In [22]: arr Out[22]: 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]]) In [23]: arr[[1, 5, 7, 2], [0, 3, 1, 2]] Out[23]: array([ 4, 23, 29, 10])
当你想得到的这样的结果时,以下是其中一种方法:
In [24]: arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]] Out[24]: array([[ 4, 7, 5, 6], [20, 23, 21, 22], [28, 31, 29, 30], [ 8, 11, 9, 10]])
布尔型索引
原文地址:https://www.cnblogs.com/xiaosanye/p/11634475.html
- vue.js如何在标签属性中插入变量参数
- SpringBoot解决ajax跨域问题
- WebBrowser(IE) 与 JS 相互调用
- HOSTS配置问题导致集群异常故障分析
- Linux Regulator Framework(2)_regulator driver
- systemd的作用
- alsa声卡分析alsa-utils调用过程(二)-tinymixer
- alsa声卡分析alsa-utils调用过程(一)-tinyplay
- ALSA声卡驱动的DAPM(二)-建立过程
- ALSA声卡驱动的DAPM(一)-DPAM详解
- 高通Audio中ASOC的codec驱动(二)
- vue项目里的日期格式化
- CentOS下的Mysql的安装和使用
- vue路由跳转传参数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何高速转储、索引和第7层网络流量过滤?
- 爬虫 | JS逆向某验滑动加密(二)
- 闲聊 Kotlin-Native (0) - 我们为什么应该关注一下 Kotlin Native?
- 哈佛大学单细胞课程|笔记汇总 (五)
- 通过源码理解IGMP v1的实现(基于linux1.2.13)
- 微服务下数据一致性的几种实现方式
- 关于mac electron设备权限申请的方法
- 两种实现方式 | 如何查看消费者组的消费情况
- 一致性hash算法(golang)
- 微服务安全吗?
- 掌握Rabbitmq几个重要概念,从一条消息说起
- 超赞!墙裂推荐一个 MySQL 自动化运维工具!
- 设计模式-责任链模式
- 问题 linux下执行.sh 文件出现 no such file or directoryile
- 问题:ssm关于mybatis没有找到配置问题(not found)