Numpy ndarray 多维数组对象的使用


Posted in Python onFebruary 10, 2021

介绍

目前它是Python数值计算中最为重要的基础包,将numpy的数组的对象作为数据交互的通用语,一般我们要充分理解好矩阵计算的原理,这需要你要有一些线性代数的基础知识。在对数据处理、清洗、构造子集、过滤、变换以及其他计算的过程快速的进行向量化计算,后续也会介绍R语言,因为R语言就是一个原生态基于向量化计算的编程语言。

Numpy的核心特征之一就是一个N维数组对象——ndarray,这是一个快速灵活的大型数据集容器,可以进行科学数值计算。

代码操作

import numpy as np

导入好包之后,我们随机生成一个2*3的数组,2行3列的随机数组

data=np.random.randn(2,3)

Numpy ndarray 多维数组对象的使用

对数组的简单操作

data*10
 
>>array([[ 9.00839244, -17.67421607, -0.03125454],
  [ 19.79906711, -2.62145167, -12.55106031]])
 
data+data
 
>>array([[ 1.80167849, -3.53484321, -0.00625091],
  [ 3.95981342, -0.52429033, -2.51021206]])
 
data.shape
 
>>(2, 3)
 
data.dtype
 
>>dtype('float64')

生成ndarray

生成数组的最简单的方法就是使用array函数,对于传入的类型可以是其他任意的序列,如你传入一个列表,那么它就会接收这个列表并转换为数组类型,如果传入的是多个列表那么它就会接收多个,在线性代数里面我们叫这个是维度,比如下面的就是一个2行3列的矩阵。

data1=[[1,2,3],[4,5,6]]
 
arry1=np.array(data1)
 
arry1
 
>>array([[1, 2, 3],
  [4, 5, 6]])
 
arry1.ndim
 
>>2
 
arry1.shape
 
>>2, 3)

除了这个我们还可以使用其他的函数来创建数组,比如给定了长度和形状类型就会一次性创建完毕,这里是创建了一个2*3的元素是1的数组

np.ones((2,3))
>>array([[1., 1., 1.],
  [1., 1., 1.]])

numpy里面也有像Python range()函数一样的效果——np.arange(),操作效果和Python的range函数有异曲同工之妙,start,stop,step都是可设置的。

Numpy ndarray 多维数组对象的使用

对角矩阵生成

Numpy ndarray 多维数组对象的使用

ndarray的数据类型

如何查看数组的数据类型以及如何进行转换,在numpy里面整型:int32,浮点型:float64.

Numpy ndarray 多维数组对象的使用

Numpy 数组计算

基于numpy的数组计算在之前我也演示了一些,四则运算,加减乘除,以及一些数组运算,每一个数组与数组之间的计算都是元素相互对于的,并不是独立的,这个是我们需要理解清楚的地方,有趣的是,我们需要比较两个相同维数的数组,我们可以利用> < = 来查看,它返回的是布尔值。

基础索引和切片

在一维的数组里面,和Python列表里面的所有一样,如果是高维的就有所不同了,就需要利用多重索引了,这里的变量和上面的一样

Numpy ndarray 多维数组对象的使用

如果产生了一个三位的数组,比如一个2*2*3的数组,我们按照索引,可以自动索引出来第一个的的数组

对于高维的数组的切片,我们需要注意的是,它的切片原理是按照数组里面的数组进行切片的,比如一个二维数组(2*3*2)的,我们需要取出每个单位数组里面的第一个元素,我们应该如何做

Numpy ndarray 多维数组对象的使用

很明显的我们可以看出多维数组的切片特点:我这里抽象化为列表的特点来解释,比如我们可以把多维数组看做是一个列表里面的多个列表,也就是嵌套列表,然后我们按照索引来取,上述例子就是首先取出两个大的数组,然后从这个两个大的数组里面再去前两个数组,最后取出索引为0的元素,这样层层递减,一步一步的索引是numpy索引的特点,之所以大数据技术之分析与计算,要用到矩阵计算的优化,就是来源于它的分而治之的原理和特点。

布尔索引

其实就是对数组里面的值或元素进行比较,之中返回布尔值即可

Numpy ndarray 多维数组对象的使用

上述例子就是产生了一个一维的字符串的数组,然后我们通过比较得出布尔值来获取data的值,自然就获取到data[0]的数组啦

注意在Python里面我们可以用and or来判断,在numpy里面我们需要&(and)|(or)来解决你的需求,记住哟

Numpy ndarray 多维数组对象的使用

Numpy ndarray 多维数组对象的使用

特殊索引

我们需要索引出不同位置的数组,这个时候我们还在一个一个的取出来吗,当然不是我们可以利用特殊的索引来解决这个问题,比如下面的例子

Numpy ndarray 多维数组对象的使用

下面我们来看看这个特殊索引的其他的用法

Numpy ndarray 多维数组对象的使用

第一步我们我们按照索引取出对角线的元素,第二的一个我们想要得到一个二维的数组,我们取出一个大数组里面索引位置分别为:1 5 7 2的一维数组然后我们利用索引位置的调换,把元素重新的进行了排序。

数组的转换和换轴

我们随机生成一个0-15的元素组成3*5的一个数组,然后利用.T属性,如果学过线性代数的小伙伴一定对这个不陌生,矩阵的转置:把行变成列,把列变成行。

Numpy ndarray 多维数组对象的使用

总结

在numpy的数组操作我们现在其实并没有发现这个对我们的数据分析有什么用处,这个很正常。就像我们之前学习线性代数,我们发现这个矩阵对我们并没什么用,但是当你使用MATLAB的时候才发现“书到用时方恨少”的道理。

到此这篇关于Numpy ndarray 多维数组对象的使用的文章就介绍到这了,更多相关Numpy ndarray 多维数组对象内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python开发的小球完全弹性碰撞游戏代码
Oct 15 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
selenium+python自动化测试之多窗口切换
Jan 23 Python
python web框架中实现原生分页
Sep 08 Python
Django框架HttpResponse对象用法实例分析
Nov 01 Python
详解python 支持向量机(SVM)算法
Sep 18 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 #Python
python利用文件时间批量重命名照片和视频
Feb 09 #Python
python opencv实现图像配准与比较
Feb 09 #Python
python urllib和urllib3知识点总结
Feb 08 #Python
Python3.9.1中使用match方法详解
Feb 08 #Python
python读取excel数据并且画图的实现示例
Feb 08 #Python
Python爬取某平台短视频的方法
Feb 08 #Python
You might like
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP生成指定长度随机数最简洁的方法
2014/07/14 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
vue-cli点击实现全屏功能
2020/03/07 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python中os和shutil模块实用方法集锦
2014/05/13 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
pygame游戏之旅 添加icon和bgm音效的方法
2018/11/21 Python
如何更优雅地写python代码
2019/07/02 Python
Python笔记之观察者模式
2019/11/20 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
keras 获取某层的输入/输出 tensor 尺寸操作
2020/06/10 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
社区志愿者心得体会
2014/01/03 职场文书
创新比赛获奖感言
2014/02/13 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
化验员岗位职责
2015/02/14 职场文书