什么?现在Python这么火,你居然还不会NumPy?那你就out了!


        数据分析,作为大数据时下比较火的行业,想要转行从事相关工作的人很多很多,那么在工作中绝对绕不过的三个包是 numpy、scipy和pandas。numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。scipy是基于numpy的科学计算包,包括统计、线性代数等工具。pandas是基于numpy的数据分析工具,能更方便的操作大型数据集,那么什么是numpy呢?它又是如何使用的呢?
在这里插入图片描述

一、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 的内部结构

其中的跨度可以是负数,这样会使数组在内存中向后移动,比如切片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) 的出现,如果错误或不足之处,还请各位读者指出,感谢阅读!

发布了25 篇原创文章 · 获赞 5 · 访问量 1490

猜你喜欢

转载自blog.csdn.net/weixin_43656359/article/details/104309179