目录

  • 一、Numpy 介绍
  • 二、NumPy 的应用
  • 学习链接
  • 三、Numpy 中的 Ndarray对象
  • 1、ndarray 的内部结构
  • 2、创建ndarray对象:
  • 四、NumPy 数据类型
  • 1、数据类型对象(dtype)
  • 2、创建 dtype 对象



       

数据分析,作为大数据时下比较火的行业,想要转行从事相关工作的人很多很多,那么在工作中绝对绕不过的三个包是

numpy、scipy和pandas。numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。scipy是基于numpy的科学计算包,包括统计、线性代数等工具。pandas是基于numpy的数据分析工具,能更方便的操作大型数据集,那么什么是numpy呢?它又是如何使用的呢?


python hdaoop教程 python pan_python hdaoop教程

一、Numpy 介绍

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy 是一个运行速度非常快的数学库,主要用于数组的计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

二、NumPy 的应用

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

学习链接

三、Numpy 中的 Ndarray对象

ndarray:他是一系列同类型数据的集合,以0位下标开始进行集合中元素的索引。

ndarray 对象是用于存放同类型元素的多维数组

ndarray 中每个元素在内存中都有相同存储大小的区域

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针
  • 数据类型或者dtype,描述在数组中的固定大小值的格子
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要 “跨过” 的字节数
1、ndarray 的内部结构

python hdaoop教程 python pan_数据类型_02

其中的跨度可以是负数,这样会使数组在内存中向后移动,比如切片obj[ : :-1] 或者 obj[:, :: -1] 就是如此。

2、创建ndarray对象:
import numpy as np

np.array(object, dtype = None, copy = True, order = None, subok = Fasle, ndmin = 0)

参数说明:

名称

描述

object

数组或嵌套的数列

dtype

数组元素的数据类型,可选

copy

对象是否需要复制,可选

order

创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)

subok

默认返回一个与基类类型一致的数组

ndmin

指定生成数组的最小维度

实例:

import numpy as np

#eg_1 单维度
a = np.array([1, 2, 3]) 
print(a)
#结果为 : [1,2,3]

#eg_2 多维度
a = np.array([[1, 2], [3, 4]]) 
print(a)
'''
结果为:[[1,2]
		3,4]]

''' 

#eg_3 最小维度
a = np.array([1, 2, 3, 4, 5], ndmin = 2)
print(a)
'''
结果为: [[1, 2, ]]  指定为2个维度
'''

#eg_4 dtype参数
a = np.array([1, 2, 3], dtype = complex)
print(a)
'''
结果为:[1. + 0.j, 2. + 0j, 3. + 0j]
'''

ndarray 对象是由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序或者列顺序来保存元素。

四、NumPy 数据类型

numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。

常用 NumPy 基本类型

名称

描述

bool_

布尔型数据类型(True 或者 False)

int_

默认的整数类型(类似于 C 语言中的 long,int32 或 int64)

intc

与 C 的 int 类型一样,一般是 int32 或 int 64

intp

用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)

int8

字节(-128 to 127)

int16

整数(-32768 to 32767)

int32

整数(-2147483648 to 2147483647)

int64

整数(-9223372036854775808 to 9223372036854775807)

uint8

无符号整数(0 to 255)

uint16

无符号整数(0 to 65535)

uint32

无符号整数(0 to 4294967295)

uint64

无符号整数(0 to 18446744073709551615)

float_

float64 类型的简写

float16

半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位

float32

单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位

float64

双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位

complex_

complex128 类型的简写,即 128 位复数

complex64

复数,表示双 32 位浮点数(实数部分和虚数部分)

complex128

复数,表示双 64 位浮点数(实数部分和虚数部分)

NumPy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_,np.int32,np.float32,等等

1、数据类型对象(dtype)

数据类型对象是用来描述与数组对应的内存区域如何使用,这依赖如下几个方面:

  • 数据的类型(整数、浮点数、或者Python对象)
  • 数据的大小(例如 整数使用了多少个字节存储)
  • 数据的字节顺序(小端法或大端法)
  • 在结构化类型的情况下,字段的名称、对每个字段的数据类型和每个字段所取的内存块的部分
  • 如果数据类型是子数组,它的形状和数据类型字节顺序是通过数据类型预先设定 ’ < ‘ 或者 ’ > ’ 来决定的。
  • ’ < ‘ 意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。
  • ’ > '意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。
2、创建 dtype 对象
import numpy as np

np.dtype(obiect, align, copy)

参数说明:

名称

描述

object

要转换为的数据类型对象

align

如果为True,填充字段使其类似C的结构体

copy

复制dtype对象,如果为False,则是对内置数据类型对象的引用

实例:

import numpy as np


#eg_1 使用标量类型
dt = np.dtype(np.int32)
print(dt)

'''
输出结果为: int32
'''

#eg_2 
'''
四种数据类型可以使用字符串来代替:
int8, int16, int32, int64
'i1',  'i2',  'i4',  'i8' 
'''
dt = np.dtype('i4')
print(dt)

'''
输出结果为:int32
'''

#eg_3 字节顺序标注
dt = np.dtype('<i4')
print(dt)

'''
输出结果为:int32
'''

#eg_4 下面的例子展示结构化数据类型的使用,类型字段和对应的实际类型将被创建

#创建结构化数据类型
dt = np.dtype([('age',np.int32)])
print(dt)

'''
输出结果为:[('age', 'i1')]
'''

#将数据类型应用于 ndarray 对象
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print(a)

'''
输出结果为:([(10,), (20,), (30,)]
'''

# 类型字段名可以用于存取实际的 age 列
dt = np.dtype([('age',np.int8)]) 
a = np.array([(10,),(20,),(30,)], dtype = dt) 
print(a)
print(a['age'])
'''
输出结果为:[(10,) (20,) (30,)]
		  [10 20 30]
'''

#eg_5 该实例将定义一个结构化类型 student, 包含字符串字段 name, 整数字段 age,以及浮点数字段 marks,并将这个 dtype 应用到 ndarray 对象

student = np.dtype([('name','S20'),('age','i1'),('marks','f4')])
print(student)
'''
输出结果为:[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')]
'''

每一个内建类型内部都有一个唯一定义它的字符代码

字符

对应类型

b

布尔型

i

(有符号) 整型

u

无符号整型 integer

f

浮点型

c

复数浮点型

m

timedelta(时间间隔)

M

datetime(日期时间)

O

(Python) 对象

S, a

(byte-)字符串

U

Unicode

V

原始数据 (void)

希望本文对初学者有所帮助,本文将持续更新,在后面各位读者将会看到更多Numpy应用,以及Python数据分析的三剑客之二 潘大师(pandas) 的出现,如果错误或不足之处,还请各位读者指出,感谢阅读!