文章目录

  • 写在前面
    • 一、数据分析与Numpy
    • 二、多维数组
    • 三、Numpy的数据类型

写在前面

代码中的np表示的是numpy,因为导入的时候是:import numpy as np

一、数据分析与Numpy

1、数据分析
MATLAB:专业化数据分析工具
Numpy:更简单上手,且结合了MATLAB大部分功能

2、Numpy介绍

  • 应用于数值分析领域的Python语言工具
  • 是一个开源的科学计算库
  • 弥补了作为通用编程语言的Python在数值计算方面能力弱、速度慢的不足
  • 拥有丰富的数学函数、强大的多位数组和优异的运算性能
  • 与Scipy、scikit、matplotlib等其他科学计算库可以很好协调
  • 可以取代matlab等工具,允许用户进行快速开发的同时完成交互式的原型设计

3、Numpy的效率

可以清楚看到,使用Numpy计算的效率是普通python语句计算的近60倍,这里使用的是微秒(10的-6次方)

4、练习代码

import datetime as dt
import numpy as npn = 100000
start = dt.datetime.now()
A, B = [], []  # 两个空列表
for i in range(n):A.append(i ** 2)  # 计算i的平方B.append(i ** 3)  # 计算i的3次方
C = []
# 用zip拉链拉起来就可以同时遍历两个列表
for a, b in zip(A, B):C.append(a + b)
print("直接:", (dt.datetime.now() - start).microseconds)  # 输出直接用py语句来实现计算的运行时间# 使用Numpy来实现
start = dt.datetime.now()
C = np.arange(n) ** 2 + np.arange(n) ** 3
print("Numpy:", (dt.datetime.now() - start).microseconds)

二、多维数组

1、多维数组
数组:空间上内存连续,元素同类型
Numpy中的数组:是numpy.ndarray这个类实例化来的对象,用于表示数据结构中的
任意维度的数组(ndarray表示数组名)

2、创建多维数组对象

  • numpy.arange(起始,终止,步长)
  • numpy.array:被解释为数组的容器
  • ndarray.dtype属性:表示元素的数据类型,astype()方法可以修改元素类型(ndarray表示数组名)
  • ndarray.shape属性:表示数组的维度,reshapre()方法可以改变维数,如b = np.arange(1, 25).reshape(2, 3, 4)
  • 元素索引:数组[页索引][行索引][列索引];数组[页索引,行索引,列索引]

3、练习代码

import numpy as npa = np.arange(1,10,2)
print(a)# 一维数组里面放入一个列表
b = np.array([2,4,6,8,10])
print(b)
# 二维数组里面放入两个一维列表
c = np.array([[1,3,5,7,9],[2,4,6,8,10]])
print(c)d = np.array(['1','2','3'])# 查看数组类型,查看元素类型
print(c.dtype)
print(type(c))
print(type(c[0][3]))
print(type(d[1]))# 给数组指定类型
e = np.array(['1','2','3'], dtype=np.int32)
print(type(e[0]))
f = e.astype(np.str)
print(type(f[0]))# 查看数组的维度
print(c.shape)
# 创建一个2*3*4的数组,一个[]就是一个维度
# 最内部arange()又代表一个维度,因此是三维
g = np.array([[np.arange(1,5), np.arange(2,6), np.arange(3,7)],[np.arange(2,6), np.arange(7,11), np.arange(12,16)]
])
print(g.shape)
print(g.shape[0])  # 输出数组的页数,2*3*4,所以是2页
print(g)# 遍历每个索引下的元素
h = np.array([[[1,2],[3,4]],[[5,6],[7,8]]
])
# shape[0]代表页数,1代表行数,2代表列数……以此类推
for i in range(h.shape[0]):for j in range(h.shape[1]):for k in range(h.shape[2]):print(h[i,j,k])

三、Numpy的数据类型

1、numpy的内置类型
bool_:1字节布尔型

int8:1字节,有符号整型(正负),-128~127
int16:2字节,有符号整型(正负)
uint8:1字节无符号整型,0~255
uint64:8字节无符号整型

float16:2字节浮点型
float64:8字节浮点型

complex64:8字节复数型
complex128:16字节复数型

str_:字符串型

2、自定义类型
通过dtype将多个相同或者不同的numpy内置类型组合成某种复合类型
除了使用内置类型的全称(后面的数字代表位数),还可以通过类型编码字符串(后面的数字代表字节数,1字节=8位)来简化类型的说明

  • numpy.int8——>i1
  • numpy.nint32——>u4
  • numpy.float64——>f8
  • numpy.complex128——>c16
  • numpy.str_——>U字符数
  • numpy.bool_——>b

3、字节序
对于多字节的整数可以加上 字节序 前缀:

<:小端字节序,低数位低地址,前高后低>:大端字节序,低数位高地址,前低后高
=:处理器(CPU)系统默认

<:0x1234

L H
0x34 0x12

>:0x1234

L H
0x12 0x34

4、练习代码

import numpy as npa = np.array([('abc',[1,2,3,4,5])],dtype='U3, 5i4')
# U3, 5i4表示一个新的类型,3个字符长度的字符串,5个4字节大小的int类型
# 访问各个字符,用默认字段名f:['f0'],['f1'],['f2']……
# print(a[0]['f0'])  # 访问到abc
# print(a[0]['f1'])  # 访问到数字
# print(a[0]['f0'][1])  # 访问b
# print(a[0]['f1'][2])  # 访问3# 自定义 字段名:字段名,类型(全称),字符数/字节大小
b = np.array([('abc',[1,2,3,4,5])],dtype=[('ss', np.str, 3), ('ii', np.int, 5)])
# 使用自定义字段名来访问
# print(b[0]['ss'])  # 访问到abc
# print(b[0]['ii'])  # 访问到数字
# print(b[0]['ss'][1])  # 访问b
# print(b[0]['ii'][2])  # 访问3# 第三种方式:既可以自定义字段名,又可以使用类型简称
c = np.array([('abc',[1,2,3,4,5])],dtype={"names":['ss', 'ii'],"formats":['U3', '5i4'],
})
# 使用自定义字段名来访问
# print(c[0]['ss'])  # 访问到abc
# print(c[0]['ii'])  # 访问到数字
# print(c[0]['ss'][1])  # 访问b
# print(c[0]['ii'][2])  # 访问3# 第四种方式:类型后面跟内存偏移量,也是既可以自定义字段名,又可以使用类型简称
d = np.array([('abc',[1,2,3,4,5])],dtype={"ss":('U3', 0),"ii":('5i4', 12)
})
# 使用自定义字段名来访问
# print(d[0]['ss'])  # 访问到abc
# print(d[0]['ii'])  # 访问到数字
# print(d[0]['ss'][1])  # 访问b
# print(d[0]['ii'][2])  # 访问3# 字节偏移量
# 同时拥有两个类型:一个u2,一个u1,u1的one偏移量为0,two偏移量为1
# >表示是大端字节序,前低后高,偏移量为0则是的低的,即12;偏移量为1则是高的,即34
e = np.array([0x1234], dtype=('>u2',{'one':('u1',0), 'two':('u1',1)}
))
print('{:x}'.format(e[0]))  # {:x}表示以16进制访问,e[0]表示第一个类型u2
print('{:x}、{:x}'.format(e['one'][0],e['two'][0]))
# 改为小端字节序,前高后低,偏移量为0则是的低的,即34;偏移量为1则是高的,即12
e = np.array([0x1234], dtype=('<u2',{'one':('u1',0), 'two':('u1',1)}
))
print('{:x}、{:x}'.format(e['one'][0],e['two'][0]))

Python之数据分析(Numpy的使用、多维数组、数据类型)相关推荐

  1. python之使用numpy实现从二维数组中找出行(子数组)为特定值的索引

    a=np.array([[0, 0],[1, 0],[2, 0],[0, 1],[1, 1],[2, 1],[0, 2],[1, 2]]) rowIndex=np.where((a == (0, 1) ...

  2. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  3. 初识 Python 科学计算库之 NumPy(创建多维数组对象)

    文章目录 参考 描述 NumPy 特点 获取 导入 多维数组对象 np.array() np.asarray() 范围 随机 概览 np.random.randn() np.random.normal ...

  4. Python: NumPy中的多维数组ndarray

    转载来源 http://blog.sciencenet.cn/home.php?mod=space&uid=3031432&do=blog&id=1064033 1 Pytho ...

  5. Python学习笔记第二十九天(N维数组(ndarray))

    Python学习笔记第二十九天 N维数组(ndarray) 构建阵列 索引阵列 ndarray的内部内存布局 阵列属性 内存布局 数据类型 其他属性 阵列接口 ctypes外部功能接口 Array方法 ...

  6. python指定数组大小_在python中创建指定大小的多维数组方式

    python中创建指定大小的二维数组,有点像C++中进行动态申请内存创建数组,不过相比较而言,python中更为简单一些. 创建n行m列的二维数组: n = 2 m = 3 matrix = [Non ...

  7. python 初始化一个4维向量_看图学NumPy:掌握n维数组基础知识点,看这一篇就够了...

    摘要:NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.国外有位程序员讲NumPy的基本运算以图解的方式写下来,让学习过程变得轻松有趣. NumPy是Python的最重 ...

  8. python数据分析numpy_利用python进行数据分析-NumPy高级应用

    1.ndarray对象的内部机理 NumPy的ndarray提供了一种将同质化数据块解释为多维数组对象的方式,ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图. ndarray内 ...

  9. [转载] python numpy.sqrt_python中numpy库ndarray多维数组的的运算:np.abs(x)、np.sqrt(x)、np.modf(x)等...

    参考链接: Python中的numpy.tan numpy库提供非常便捷的数组运算,方便数据的处理. 1.数组与标量之间可直接进行运算 In [45]: a Out[45]: array([[ 0, ...

  10. numpy基础1多维数组对象

    1 # coding: utf-8 2 # numpy ndarry:多维数组对象 3 import numpy as np 4 # 生成随机数组 5 data = np.random.randn(2 ...

最新文章

  1. html列表的列选择事件,html5 datalist 选中option选项后的触发事件
  2. LeetCode题组:第9题-回文数
  3. python操作mysql数据库 内存占用100_python操作MySQL数据库
  4. K8s 学习者绝对不能错过的最全知识图谱(内含 56个知识点链接)
  5. linux timespec 链接库,Linux内核 timespec_sub()
  6. java代码怎样整体左移_java 多行代码左移
  7. 特斯拉造人、小鹏骑马、小米遛狗,准车企们为何集体盯上了机器人生意?
  8. [OpenGL] glColor 和 glClearColor 区别
  9. HDU 2815 扩展baby step giant step 算法
  10. 外贸出口管理系统亮点及重点
  11. python导入文件夹下所有包_python 通过文件夹导入包的操作
  12. 青龙面板篇——美团(细致教程 有手就行~)
  13. electron-builder 打包 exe 异常错误集锦
  14. 『ANDROID』android animator 动画
  15. 海思3516开发记录-AAC音频解码
  16. c语言 数组的抽奖小游戏
  17. 手机号可以当邮箱使用吗?怎么申请注册手机号邮箱,登录入口在哪儿?
  18. 行人重识别的代码复现
  19. Postman的API授权、Cookies和证书
  20. linux 申请连续内存,Linux-Linux应用层编程,如何申请物理地址连续的内存空间?...

热门文章

  1. unity 获取预制体_新手如何从零学习unity
  2. julia go python_过去的Python的四个挑战者:Swift、Go、Julia、R
  3. 北京交通大学计算机学院篮球,院际杯篮球赛|男篮小组赛第四轮战报
  4. ajax主要有哪些方法,ajax的使用方法和原理,ajax包括哪些技术呢
  5. python shell 继承 环境变量_Python subprocess shell 丢失环境变量 | 学步园
  6. python 抢票代码 猫眼演出_python爬虫实例-猫眼电影
  7. 用计算机参加关于动漫的工作计划,动漫社团年度工作计划
  8. matlab自家自减,【求助】VC环境下自增(++)自减(--) - 信息科学 - 小木虫 - 学术 科研 互动社区...
  9. Java游戏用户登录注册_Java实现多用户注册登录的幸运抽奖
  10. java下载网络文件_java下载网络文件的方法有哪些