Numpy库基础

  • 安装numpy库
  • numpy介绍
  • Numpy数组对象
    • 创建多维数组
    • 获取数组中的元素
    • Numpy数据类型
    • 数据类型对象
    • Numpy字符编码
    • 自定义数据类型
    • dtype类的属性
    • 创建自定义数据类型

安装numpy库

  • 直接安装:
pip install numpy
  • 换源安装
pip install numpy -i https://pypi.douban.com/simple
  • 或者使用python集成环境anaconda进行安装

numpy介绍

  • NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和 随机数生成等功能

Numpy数组对象

numpy中主要操作的对象就是多维数组(ndarray),该数组由两部分组成:

  • 实际的数据
  • 描述这些数据的元数据

而大部分的数组操作仅仅修改元数据部分,而不是修改底层的实际数据

NumPy中的数组一般是同质的(但有一种特殊的数组类型例外,它是异质的),即数组中的所有元素类型必须是一致的。这样有一个好处:如果我们知道数组中的元素均为同一类型,该数组所需的存储空间就很容易确定下来

  • 与Python中一样,NumPy数组的下标也是从0开始的。数组元素的数据类型用专门的对象表示

  • 我们使用numpy中的arange函数创建数组,并获取其数据类型

import numpy as np
one_arr=np.arange(5)
one_arr.dtype

  • 数组one_arr的数据类型为int32(在我的机器上是这样),当然如果你使用64位的Python,得到的结果可能是int64。不论是哪种情形,该数组的数据类型都是整数(64位或32位)。除了数据类型,数组的维度也是重要的属性

上述例子演示了怎样创建一个向量(即一维的NumPy数组)。向量在数学中很常用,但
大部分情况下,我们需要更高维的对象。先来确定一下刚刚所创建向量的维度:

one_arr.shape

  • 上图所示:这是一个包含5个元素的向量,取值分别为0~4的整数。数组的shape属性返回一个元组(tuple),元组中的元素即为NumPy数组每一个维度上的大小。上面例子中的数组 是一维的,因此元组中只有一个元素

创建多维数组

我们已经知道如何创建向量,现在可以试着创建多维的NumPy数组,并查看其维度

  • 创建多维数组
two_arr=np.array([np.arange(2),np.arange(2)])
two_arr

  • 查看其维度
two_arr.shape

  • 在上面,我们将arange函数创建的数组作为列表元素,把这个列表作为参数传给array函数,从而创建了一个2×2的数组,而且没有出现任何报错信息

  • array函数可以依据给定的对象生成数组。给定的对象应是类数组,如Python中的列表。在上面的例子中,我们传给array函数的对象是一个NumPy数组的列表。像这样的类数组对象是array函数的唯一必要参数,其余的诸多参数均为有默认值的可选参数

获取数组中的元素

  • 在这里我们就使用上面创建的two_arr二维数组进行演示

  • 在创建这个多维数组时,我们给array函数传递的对象是一个嵌套的列表。现在来依次选取该数组中的元素。记住,数组的下标是从0开始的

a=two_arr[0,0]
a

  • 上述就是从数组中或取元素。对于数组two_arr来说,只需要用two_arr[m,n]选取各数组元素,其 中m和n为元素下标,对应的位置如下表所示:

Numpy数据类型

  • Python支持的数据类型有整型、浮点型以及复数型,但这些类型不足以满足科学计算的需求,因此NumPy添加了很多其他的数据类型。在实际应用中,我们需要不同精度的数据类型,它们占用的内存空间也是不同的。在NumPy中,大部分数据类型名是以数字结尾的,这个数字表示其在内存中占用的位数

  • 如下图所示

类型 描述
bool 用一位存储的布尔类型(值为TRUE或FALSE)
inti 由所在平台决定其精度的整数(一般为int32或int64)
int8 整数,范围为-128至127
int46 整数,范围为-32768至32767
int32 整数,范围为-231至231-1
int64 整数,范围为-263至263-1
uint8 无符号整数,范围为0至255
uint16 无符号整数,范围为0至65535
uint32 无符号整数,范围为0至232-1
uint64 无符号整数,范围为0至264-1
float16 半精度浮点数(16位):其中用1位表示正负号,5位表示指数,10位表示尾数
float32 半精度浮点数(32位):其中用1位表示正负号,8位表示指数,23位表示尾数
float64或float 半精度浮点数(64位):其中用1位表示正负号,11位表示指数,52位表示尾数
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128或complex64 复数,分别用两个64位浮点数表示实部和虚部
  • 每一个数据类型均有对应的类型转换函数:
  • 上述即为一部分numpy的数据类型转换函数
  • 在NumPy中,许多函数的参数中是可以指定数据类型,通常这个参数是可选的:
arr=np.arange(7,dtype=np.uint16)

  • 需要注意的是,复数是不能转换为整数的,这将触发TypeError错误:
  • 同样,复数也不能转换为浮点数。不过,浮点数却可以转换为复数,注意,有j的部分为复数的虚部

数据类型对象

  • 数据类型对象是numpy.dtype类的实例。如上所述,NumPy数组是有数据类型的,更确切 地说,NumPy数组中的每一个元素均为相同的数据类型。数据类型对象可以给出单个数组元素在内存中占用的字节数,即dtype类的itemsize属性
two_arr.dtype.itemsize
two_arr.dtype

Numpy字符编码

  • NumPy可以使用字符编码来表示数据类型,这是为了兼容NumPy的前身Numeric。不推荐使用字符编码,但有时会用到,因此在下面还是列出了字符编码的对应表。我们在使用Numpy时应该优先使用dtype对象来表示数据类型,而不是这些字符编码
数据类型 字符编码
整数 i
无符号整数 u
单精度浮点数 f
双精度浮点数 d
布尔值 b
复数 D
字符串 S
unicode字符串 U
void (空) V
  • 下面使用字符编码出创建numpy数组:
  • 创建一个单精度浮点数数组:
a=np.arange(7,dtype='f')

  • 也可创建一个复数数组
a=np.arange(7,dtype='D')

自定义数据类型

有很多种自定义数据类型的方法,以浮点型为例:

  • 可以使用Python中的浮点数类型:
np.dtype(float)

  • 可以使用字符编码来指定单精度浮点数类型:
np.dtype('f')

  • 可以使用字符编码来指定双精度浮点数类型:
np.dtype('d')

  • 还可以将两个字符作为参数传给数据类型的构造函数。此时,第一个字符表示数据类型, 第二个字符表示该类型在内存中占用的字节数(2、4、8分别代表精度为16、32、64位的浮点数):
np.dtype('f8')

  • 完整的Numpy数据类型列表可以在sctypeDict.keys()中找到:
np.sctypeDict.keys()

dtype类的属性

  • dtype类有很多有用的属性。例如,我们可以获取数据类型的字符编码:
a=np.dtype('f8')
a.char

  • type属性对应于数组元素的数据类型:
a.type

  • str属性可以给出数据类型的字符串表示,该字符串的首个字符表示字节(endianness), 后面如果还有字符的话,将是一个字符编码,接着一个数字表示每个数组元素存储所需的字节数。 这里,字节序是指位长为32或64的字(word)存储的顺序,包括大端(bigendian)和小端序 (little-endian)。大端序是将最高位字节存储在最低的内存地址处,用>表示;与之相反,小端序 是将最低位字节存储在最低的内存地址处,用<表示:
a.str

创建自定义数据类型

  • 自定义数据类型是一种异构数据类型,可以当做用来记录电子表格或数据库中一行数据的结构。作为示例,我们将创建一个学生信息的数据类型。其中,我们用一个长度40个字 符的字符串来记录学生名称,用一个32位的整数来记录学生的年龄,最后用个32位的单精 度浮点数来记录学生的身高 。下面是具体的步骤:
  • 创建数据类型:
t = np.dtype([('name', np.str_, 40), ('age', np.int32), ('height',np.float32)])
t

  • 查看数据类型(也可以查看某一字段的数据类型) :
t['age']

  • 在用array函数创建数组时,如果没有在参数中指定数据类型,将默认为浮点数类型。而现在,我们想要创建自定义数据类型的数组,就必须在参数中指定数据类型,否则将触发TypeError错误:
student=np.array([('ycx',18,165.6),('fbl',22,188.8)],dtype=t)
student[1]

python数据分析基础之Numpy库详解(一)相关推荐

  1. $python数据分析基础——初识numpy库

    numpy库是python的一个著名的科学计算库,本文是一个quickstart. 引入:计算BMI BMI = 体重(kg)/身高(m)^2 假如有如下几组体重和身高数据,让求每组数据的BMI值: ...

  2. Python数据分析常用函数及参数详解,可以留着以备不时之需

    利用Python进行数据分析最核心的库就是Pandas,可以说,掌握了Pandas库,Python数据分析就属于中阶水平了. 在<一次简单.完整的全流程数据分析,让我们不再害怕Python &g ...

  3. PySpark 数据分析基础:PySpark 原理详解

    一.基础原理 我们知道 spark 是用 scala 开发的,而 scala 又是基于 Java 语言开发的,那么 spark 的底层架构就是 Java 语言开发的.如果要使用 python 来进行与 ...

  4. java基础_题库详解

    删除线格式 # 1 JDK和JRE有什么区别? JRE:Java Runtime Environment( java 运行时环境).即java程序的运行时环境,包含了 java 虚拟机,java基础类 ...

  5. python数据分析基础教程 numpy 2pdf_Python数据分析基础教程:NumPy学习指南(第2版)...

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  6. python怎样快速下载库_Python如何急速下载第三方库详解

    前言 pip 是一个现代的,通用的 Python 包管理工具 ,是一个安装第三方 库必备的工具,提供了对Python 包的查找.下载.安装.卸载的功能.但是在国内使用有很多因素的限制,一个3.4M的库 ...

  7. Python机器学习基础之Matplotlib库的使用

    声明:代码的运行环境为Python3.Python3与Python2在一些细节上会有所不同,希望广大读者注意.本博客以代码为主,代码中会有详细的注释.相关文章将会发布在我的个人博客专栏<Pyth ...

  8. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解

    1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...

  9. Python 数据分析三剑客之 NumPy(六):矩阵 / 线性代数库与 IO 操作

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

最新文章

  1. java makedir用法_Java Files.makeDir方法代码示例
  2. 14种常见HTTP状态码
  3. ubuntu 循环登录问题,
  4. 随机过程:高斯函数导数、梯度
  5. enum in c language
  6. angularjs sill 创建项目_开源项目——博客项目MyBlogs.Core,基于.NET 5
  7. 实战演练:如何用BBED恢复删除的数据
  8. VHDL常用操作符介绍
  9. webStorm部分以及重要快捷键
  10. ubuntu-18.10 允许 root登录图形界面
  11. 网络流之最小点权覆盖和最大点权独立集学习
  12. 微软BI 之SSIS 系列 - 使用 Multicast Task 将数据同时写入多个目标表,以及写入Audit 与增量处理信息...
  13. Caffe傻瓜系列(4):其它常用层及参数
  14. 一步步写俄罗斯方块(二)
  15. iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
  16. 云计算零基础(八) 破解密码
  17. 12306 抢票软件已被限制
  18. 前方高能预警!三星Galaxy A6s带你闹元旦
  19. 《童虎学习笔记》20分钟实战ProxySQL MGR高可用及读写分离架构
  20. 【英语:基础高阶_全场景覆盖表达】K9.口语主题陈述——饮食健康类

热门文章

  1. 双目立体匹配_StereoNet网络
  2. github copilot X - chat 使用体验分享
  3. matlab定义双精度型变量_matlab里,怎样定义变量类型
  4. mapbox 添加argis rest 动态地图服务
  5. Python阶乘求和
  6. 12_清醒思考艺术书摘
  7. 自定义TOTP方法,实现google的TOTP令牌token
  8. SAP接口设计-概览
  9. TASKCTL的流程无触发设计
  10. Reverse Engineering AI Algorithms with XAI