Numpy数值类型与数值运算-03
什么是NumPy?
NumPy是Python中科学计算的基本软件包。它是一个Python库,提供多维数组对象,各种派生对象(例如蒙版数组和矩阵)
以及各种例程,用于对数组进行快速操作,包括数学,逻辑,形状处理,排序,选择,I / O ,离散傅立叶变换,基本线性代数,基本统计运算,随机模拟等等。
NumPy包的核心是ndarray对象。这封装了均匀数据类型的n维数组,为了提高性能,许多操作都在编译后的代码中执行。NumPy数组和标准Python序列之间有几个重要的区别:
- NumPy数组在创建时具有固定的大小,这与Python列表(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原始数组。
- NumPy数组中的所有元素都必须具有相同的数据类型,因此在内存中的大小将相同。例外:一个对象可以具有(Python,包括NumPy)对象的数组,从而允许数组具有不同大小的元素。
- NumPy数组有助于对大量数据进行高级数学运算和其他类型的运算。通常,与使用Python的内置序列相比,此类操作可以更高效地执行,并且代码更少。
- 越来越多的基于Python的科学和数学软件包都使用NumPy数组。尽管这些通常支持Python序列输入,但它们会在处理之前将此类输入转换为NumPy数组,并且通常会输出NumPy数组。换句话说,为了有效地使用很多(也许甚至是大多数)当今基于科学/数学的基于Python的软件,仅仅知道如何使用Python的内置序列类型是不够的-人们还需要知道如何使用NumPy数组。
- (总结就是一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算)
为什么NumPy快速?
向量化描述了代码中没有任何显式的循环,索引等操作-当然,这些事情发生在优化的预编译C代码中的“幕后”。向量化代码具有许多优点,其中包括:
- 向量化的代码更简洁,更易于阅读
- 更少的代码行通常意味着更少的错误
- 该代码更类似于标准数学符号(通常更容易正确地编码数学结构)
- 向量化产生更多的“ Pythonic”代码。没有向量化,我们的代码将效率低下且难以读取
for
循环。
广播是一个术语,用于描述操作的隐式逐元素行为。一般而言,在NumPy中,所有运算,不仅是算术运算,而且是逻辑,按位,函数等,均以这种逐个元素的隐式方式进行操作,即广播。而且,在上面的示例中,
a
并且b
可以是相同形状的多维数组,或者是标量和数组,甚至可以是形状不同的两个数组,条件是较小的数组可以“扩展”到较大的形状。最终广播是明确的。有关广播的详细“规则”,请参见numpy.doc.broadcasting
。还有谁使用NumPy?
NumPy完全支持面向对象的方法,再次从ndarray开始。例如,ndarray是一个类,具有许多方法和属性。它的许多方法都由最外层的NumPy命名空间中的函数反映,从而允许程序员以他们喜欢的任何范式进行编码。这种灵活性使NumPy数组方言和NumPy ndarray类成为了Python中使用的多维数据交换的事实上的语言。
特点:快速、方便、科学计算库
numpy创建数组(矩阵)
import numpy as np
#创建数组
a = np.array([1,2,3,4,5])
b = np.array(range(1,6))
c = np.arange(1,6)#b和c相比,方便
print(a,b,a)
#上面创建a,b,c都相同,都是创建了一个一维数组数组的类名
a = np.array([2,3,4,5,6])
print(type(a))数组的类型
print(a.dtype)
数据类型的操作
指定创建的数组的数据类型
# a = np.array([1,0,2,0],dtype=np.bool)#或者使用dtype="?"
a = np.array([1,0,2,0],dtype="?")#或者使用dtype="?"
print(a)修改数组的数据类型
# a.astype("i1")#或者使用a.astype(np.int8)
a.astype(np.int8)修改浮点型的小数位数
import random
#生成一维10个数的数组
a = np.array([random.random() for i in range(10)])
print(a)
print(type(a))
print(a.dtype)#保留几位小数
b = np.round(a,2)
print(b)数组的形状
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])
a查看数组的形状
b = a.reshape(5,2)
print(b)
print(a)#可以看出修改形状,不是在a的基础上修改
#是备份修改的把数组转化为1维数据
c = b.reshape(1,10)##注意这不是一维数组,这是二维
print("c",c)
d = b.reshape((10,))
print("d",d)#这才是一维数组 注意看中括号
b.flatten()#这个是一维的
b.reshape(1,10)#这个是二维的数组和数的计算
有趣吧,这是一个numpy的广播机制造成的,在运算过程中,加减乘除的值被广播到所有的元素上面(有点像计算机网络同一个局域网中广播机制)
数组和数组的计算(我将jupyter notebook中练习直接截图出来)
在上面可以看出结果中有inf这个标志,这是无穷大的意思,是无穷大单词的缩写。
不同维度的数组计算:
总结:上面(ValueError: operands could not be broadcast together with shapes (3,4) (1,3))这个错误是由于数组t1与t3在任一维度没有相等的,
所以不能进行运算。无论多维,只要存在一个维度相当,即可参与运算。
广播原则(重要)
- 如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失和(或)长度为1的维度上进行。
怎么理解呢? 可以把维度指的是shape所对应的数字个数那么问题来了: shape为(3,3,3)的数组能够和(3,2)的数组进行计算么?
答案是不能的,在任意维度没有相同的,是不能进行运算的。
shape为(3,3,2)的数组能够和(3,2)的数组进行计算么? 有什么好处呢?
可以进行运算,存在维度相同,换句话来说理解有点难,那么可以想出一维与二维进行运算的条件也就是这个意思。
举个例子:每列的数据减去列的平均值的结果
轴(axis)
在numpy中可以理解为方向,使用0, 1,2...数字表示,对于一个- -维数组,只有一个0轴,对于2维数组(shape (2, 2)),有0轴和1轴,对于三维数组(shape(2,2,3)), 有0, 1, 2轴 有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值 那么问题来了: 在前面的知识,轴在哪里? 回顾np. arange (0, 10). reshape (2, 5)), reshpe中2表示0轴长度(包含数据的条数)为2, 1轴长度为5, 2*5-共10个数据
二维数组的轴:
三维数组的轴:
Numpy数值类型与数值运算-03的更多相关文章
- Python黑帽编程2.2 数值类型
Python黑帽编程2.2 数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型.长整型.布尔.双精度浮点.十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区 ...
- 《Python学习手册 第五版》 -第5章 数值类型
本章是承接第四章整体说明之后,将对”数值类型“展开详细的说明 数值类型这一章主要通过一下几个内容来讲解: 1.数值类型有哪些? 2.表达式运算符:有哪些?有什么规范? 3.数值的显示格式 接下来,从第 ...
- MySQL的数值类型,时间
数值类型 整数型 tinyint smallint mediumint int|integer bigint 注意: 1, 如何选择数据类型,我们的原则是:够用就行!尽量的选择占用内存小的整型 ...
- Java 数值类型以及计算
前段时候写了一个对外提供的接口,其中有一个数值校验的计算.在测试的过程中发现5.6-1.6 != 4,在反复的测试过程中发现double类型的数值为有精度丢失的现象,看来还是基础知识不牢固,所以就在网 ...
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- Python数值类型
数值类型 python的数值类型包括常规的类型:整数(没有小数部分的数字).浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数.分数.有理数.无理数.集合.进制数等).除了十进制整数,还有 ...
- 4.1Python数据类型(1)之数值类型
返回总目录 目录: 1.数据类型的表现形式: 2.数据进制的转换: 3.数据的常规操作: (一).数据类型的表现形式: (1)整数类型: # 二进制: a = 0b0110 print("二 ...
- char类型的数值转换
在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用, ...
- java中不同类型的数值占用字节数
在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型.(一个字节等于8个bit) 1.整型 类型 ...
随机推荐
- shell编程之case分支语句
shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...
- [Linux] 多进程网络编程监听一个端口
SO_REUSEPORT支持多个进程或者线程绑定到同一端口 每个进程可以自己创建socket.bind.listen.accept相同的地址和端口,各自是独立平等的.让多进程监听同一个端口,各个进程中 ...
- 附002.Minikube介绍及使用
一 Minikube介绍 1.1 概述 Minikube是一种可以在本地轻松运行Kubernetes的工具.Minikube在笔记本电脑的VM中运行单节点Kubernetes集群,供希望尝试Kuber ...
- Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...
- 32.Java基础_异常
JVM虚拟机默认异常处理机制 Java异常处理: 1.try...catch... 2.throw 1.try...catch... public class test{ public static ...
- tf.InteractiveSession()与tf.Session()的区别
Tensorflow依赖于一个高效的C++后端来进行计算.与后端的这个连接叫做session.一般而言,使用TensorFlow程序的流程是先创建一个图,然后在session中启动它. 这里,我们使用 ...
- 数据、模型、IT系统认知
数据.模型.IT系统认知 量化投资定义 量化投资主要是指通过数理模型来实现投资理念,由计算机产生交易策略的一种投资方法. 量化投资是一种方法论,而不是具体的交易策略. 通常与基本面.技术面分析相结合. ...
- Linux下MySQL数据库的my.cnf配置文件,解决中文乱码问题
系统 CentOS 7.7 MySQL - 5.7.28文件放置目录:/etc/文件权限:644解决问题:存储中文数据乱码 # For advice on how to change settings ...
- 手把手教你制作Jlink-OB调试器(含原理图、PCB、外壳、固件)
前言 好久没更新博客和公众号了,感谢大家还没取关哈,好吧,我承认是我太懒了,今天分享一个福利! 趁着前段时间嘉立创和捷配打价格战,一天之内,多次降价,看着真是热闹.捷配降到最低3元一款,而嘉立创降到最 ...
- Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考
Java生鲜电商平台-商城系统库存问题分析以及产品设计对逻辑/物理删除思考 说明:在生鲜电商的库存设计,是后台的重点,也是难点,关乎商品是否存在超卖.商品的库存增加方式倒不难,直接在后台添加即可,而扣 ...