Numpy库的学习(五)
今天继续学习一下Numpy库,废话不多说,整起走
先说下Numpy中,经常会犯错的地方,就是数据的复制
这个问题不仅仅是在numpy中有,其他地方也同样会出现
- import numpy as np
- a = np.arange(12)
- b = a
- print(b is a)
- b.shape = 3,4
- print(a.shape)
- print(id(a))
- print(id(b))
先看看这段代码,我们随便建立了一个numpy数组
然后我想把a这个值,赋值给b,很简单的操作,b = a
那么我们打印一下b和a是不相等,返回的结果为True
也就是说,b和a是相等的
那么我们现在讲b做个shape变换
然后在看看a的shape有没有变换
我们这里多打印些东西,更容易我们理解
我们看到a 的id,和b 的id 是一样的,说明a和b,是完全相等的
我改变其中任意一个,都是改变另外一个值。实际上a和b指向的都是内存中的同一个地址
我们接着看下面的代码
- c = a.view()
- print(c is a)
- c.shape = 2,6
- print(a.shape)
- c[0,4] = 1234
- print(a)
- print(id(a))
- print(id(c))
我这里 定义了一个c,这个c也是一种复制,浅复制。用view()
我们在看看c 是不是a,返回的结果则是,False,说明,a和c不相等
我们将c.shape变换为2,6
打印一下a.shape发现,a的shape还是3,4
那么我将c中的一个值,修改为1234
可以看到,打印出来的a也改变了
让后通过id发现, 他们两个不是同一个地址。但是我修改的时候会做修改
说明,用view()方法复制出来的数据,相当于python中的浅拷贝。
简单说,就是a和c他们指向的地址不一样,但是他们公用一组数据。
但是这个view不推荐使用
下面我们接着看
- d = a.copy()
- print(d is a)
- d[0,0] = 9999
- print(d)
- print(a)
这里看到,d = a.copy(),a 不是d ,所以打印出来是False
那么我们让d 中的 一个元素变成9999
那么打印一下a和d 发现,a中没有变化,d中有变化,也就是说
如果我们想让一个变量,的初始值是a,然后在新的上面做一些变化的时候,一定要用copy来做
下面我们在说说argmax
- data = np.sin(np.arange(20).reshape(5,4))
- print(data)
- ind = data.argmax(axis=0)
- print(ind)
- data_max = data[ind, range(data.shape[1])]
- print(data_max)
这段代码可以看出,我们生成了一个5行 4列的矩阵。我们定义维度axis = 0 就是按照列进行选择
打印一下可以看到,第一列中0.98935825这个值是最大的。我们通过打印ind,得到最大的值是矩阵第一列的第3个元素
也就是元素下标为2,那么第二列中,第一个元素最大,下标为0,以此类推,得到[2 0 3 1]
按行找的话,需要设置维度axis = 1,即可
我们想取到,没列中,最大的数是多少,可以使用data_max这种取值方式,将矩阵中按照列排列最大的元素是多少,取出来
- a = np.arange(0,40,10)
- print(a)
- b = np.tile(a,(4,2))
- print(b)=
看到上面这段代码,我们生成一个向量
然后,通过tile函数,将我们生成的向量传入进去,让后按照矩阵进行翻倍变换
得到,4行2列的数据,下面继续
- a = np.array([[4,3,5],[1,2,1]])
- print(a)
- b = np.sort(a, axis = 1)
- print(b)
- a.sort(axis = 1)
- print('****************')
- print(a)
- a = np.array([4,3,1,2])
- j = np.argsort(a)
- print('***************')
- print(j)
- print('***************')
- print(a[j])
首先我们使用sort,将我们的a进行了以行为主的排序
我们可以看到,使用np.sort和直接.sort的效果是一样的
np.argsort,则是求出a的索引值,然后再按照a的索引值进行排序
今天就先说到这里,感谢各位的阅读,感谢支持!!谢谢!!
Numpy库的学习(五)的更多相关文章
- Numpy库的学习(三)
今天我们继续学习一下Numpy库的学习 废话不多说 ,开始讲 比如我们现在想创建一个0-14这样一个15位的数组 可以直接写,但是很麻烦,Numpy中就给我们了一个方便创建的方法 numpy中有一个a ...
- Numpy库的学习(四)
我们今天继续学习一下Numpy库 接着前面几次讲的,Numpy中还有一些标准运算 a = np.arange(3) print(a) print(np.exp(a)) print(np.sqrt(a) ...
- Numpy库的学习(二)
今天来继续学习一下Numpy库的使用 接着昨天的内容继续 在Numpy中,我们如果想要进行一个判断使用“==” 我们来看下面的代码 vector = np.array([5,10,15,20,25]) ...
- Numpy库的学习(一)
今天来学习一下Python库中,支持高级大量的维度数组与矩阵运算的神奇的Numpy库 Numpy同时也对数组运算提供大量的数学函数,对于大量计算运行效率极好 是大量机器学习框架的基础库 废话不多说,直 ...
- numpy库的学习笔记
一.ndarray 1.numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”. 2.ndarray是一个多维数组的对象,ndarray数组一般要求所有元素类型相 ...
- Numpy库基础___五
Numpy数据存取 •NumPy的随机数函数 a = np.random.rand(1,2,3) print(a) #[[[0.03339719 0.72784732 0.47527802] # [0 ...
- python的numpy库的学习
1.创建 array(序列类型).asarray.arange.ones.ones_like.zeros.zeros_like.empty.empty_like.eye.identity 2.运算 两 ...
- Python Pandas库的学习(一)
今天我们来学习一下Pandas库,前面我们讲了Numpy库的学习 接下来我们学习一下比较重要的库Pandas库,这个库比Numpy库还重要 Pandas库是在Numpy库上进行了封装,相当于高级Num ...
- 【python】numpy库和matplotlib库学习笔记
Numpy库 numpy:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成,并可与C++/Fortran语言无缝结合.树莓派Python v3默 ...
随机推荐
- 给女朋友讲解什么是Optional【JDK 8特性】
前言 只有光头才能变强 前两天带女朋友去图书馆了,随手就给她来了一本<与孩子一起学编程>的书,于是今天就给女朋友讲解一下什么是Optional类. 至于她能不能看懂,那肯定是看不懂的.(学 ...
- VS2017、VS2019没有Setup安装项目(Visual Studio Installer)_解决方案
前言: VS2010中有一个自带的安装部署项目,叫:Visual Studio Installer ,我们通常称为:setup项目,是一个用于自定义安装部署的项目方案.但是在VS2017,VS2019 ...
- Eclipse4JavaEE安装Gradle,并导入我们的Gradle项目
第一步:下载Gradle Gradle下载链接,如下图,下载最新版本即可.下载下来的zip包,解压到一个目录即可,如F盘 第二步:配置环境变量 首先添加GRADLE_HOME,如下图 然后在Path下 ...
- Android-----Intent中通过startActivity(Intent intent )隐式启动新的Activity
显式Intent我已经简单使用过了,也介绍过概念,现在来说一说隐式Intent: 隐式Intent:就是只在Intent中设置要进行的动作,可以用setAction()和setData()来填入要执行 ...
- mysql7笔记----遍历节点所有子节点
mysql遍历节点的所有子节点 DELIMITER // CREATE FUNCTION `getChildrenList`(rootId INT) ) BEGIN ); ); SET sTemp = ...
- kettle 备注
1. 基本组成 1.1 spoon: 一个可视化的工具,用于编辑kettle ETL的任务脚本 1.2 span: 用以命令行方式执行spoon的转换 1.3 kitchen: 用以命令行方式执行sp ...
- Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!
Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...
- RabbitMQ第一次不能正常读取第二次正常的问题
1.利用rabbitmq导数据包,第一不能正常导入,第二次正常,第三次又出现问题,第四次又恢复正常的坑爹问题. 2.可访问rabbitmq注意消费者个数是否正常 有两个消费者,导致第一次消息被第一个消 ...
- js数组遍历(for in ,for of ,map,foreach,filter)的区别
一.for in 和for of 的区别 1.for in 遍历数组时,索引实际上是字符串类型的数字,不能进行运算,我们来输出一下: let arr = [1,3,5,4] for (let inde ...
- .NET Core Session的简单使用
前言 在之前的.NET 里,我们可以很容易的使用Session读取值.那今天我们来看看 如何在.NET Core中读取Session值呢? Session 使用Session之前,我们需要到Start ...