Numpy入门

Numpy支持大量的维度数组与矩阵运算,也针对数组运算提供了大量的数学函数库。

包含内容:

1️⃣一个强大的 N 维数组对象ndarray;

2️⃣广播功能函数;

3️⃣整合C/C++/Fortran代码的工具;

4️⃣线性代数、傅里叶变换、随机数生成等功能。

一、NumPy 应用

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

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

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

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

二、Ndarray对象

ndarray是一系列同类型数据和大小(通常固定大小)的集合,以0下标为开始进行集合中元素的索引。所以ndarray是用来存放同类型数据的多维数组,其中的每个元素在内存中都占有相同大小的存储区域。ndarray内部由以下内容组成:

  • 一个指向数据(内存挥着内存映射文件中的一块数据)的指针;

  • 数据类型或dtype,描述数组中的固定大小值的格子;

  • 一个表示数组形状(shape)的元组,表示每个维度的大小;

    这个元组由N个非负整数组成。

  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要”跨过“的字节数。

与Python中的其他对象容器一样,可以通过对数组进行索引和切片以及通过ndarray的方法和属性来访问和修改。

不过不同的是,ndarary可以共享相同的数据,因此在一个ndarray中进行修改可能在另一个中可见。也就是说,ndarray可以是另一个ndarray的“view”,它所指的数据由“base”ndarray处理。

⁉️ndarray也可以是Python拥有的内存strings或实现buffer或数组接口的对象的视图。

内部结构示意图:

Numpy入门_第1张图片

跨度可以是负数,这样会使数组在内存中向后移动。

创建ndarray:

numpy.array(object, dtype = None, copy = True,order = None, subok = False, ndmin = 0)

参数说明:

object:数组或者嵌套的列表;

dtype:数组元素的数据类型;

cpoy:可选参数,表示数组能否复制,默认True;

order:表示以哪种内存布局创建数组,有三个值可选(C行序列/F列序列/任意方向A)

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

ndmin:指定生成数组的最小维度。

实例:

import numpy as np

a = np.array([[1, 2], [3, 4]], dtype=complex)
b = np.array([1, 2, 3, 4], ndmin=2)

print(a, type(a))
print("====")
print(b, type(b))
print(b.ndim)

运行结果:

[[1.+0.j 2.+0.j]
 [3.+0.j 4.+0.j]] <class 'numpy.ndarray'>
====
[[1 2 3 4]] <class 'numpy.ndarray'>
2

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

​ 数组的形状指的是数组的行数和列数。Numpy提供了reshape()函数来改变数组的行数和列数。

Numpy入门_第2张图片

实例:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = a.reshape(1, 4)

print(b, b.ndim)
print(b[0][1])
print(a.ndim)

运行结果:

[[1 2 3 4]] 2
2
2

判断数组的维度:判断数组维度

三、Numpy数据类型

Numpy支持的数据类型比Python内置的数据 要多得多。

名称 类型
bool_ 布尔数据类型
int_ 默认的整数类型,类似C语言中long,int32、int64
intc 和C语言中的int类型一样,一般是int32或者int64
intp 用于索引的整数类型,类似于C中色ssize_t,一般还是int32或int64
int8 一字节相同的8位整数,-128~127
int16 两字节(16位),-32768~32767
int32、int64 不多赘述
uint8 无符号整数
uint16.unit32、uint64 不多赘述
float_ float64的简写
float16 半精度浮点数,包括1个符号位,5个指数位,10个尾数位
float32 单精度浮点数,包括1个符号位,8个指数位,23个尾数位
float64 双精度浮点数,包括1个符号位,11个指数位,52个尾数位
complex_ 复数类型,与complex128相同
complex64 实部和虚部共享32位的数据类型
complex128 同理
str_ 字符串类型
string_ 字节串类型

数据类型对象(dtype)

dtype对象用来描述与数组对应的内存区域是如何使用的,它从以下几个方面进行了描述:

  • 数据类型:整数、浮点数、Python对象
  • 数据大小:例如整数用多少字节存储
  • 数据字节顺序: 小端法或者大端法
  • 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块部分
  • 如果数据类型是子数组,那么它的数据类型是什么

字节顺序是通过数据类型预先设定<>来决定的。<表示小端法,即最小值存储在最小的地址,也就是低位组放在最前面,>相反。

所以dtype对象除了可以描述数组元素的数据类型、大小、字节顺序外,同时它也可以用来常见结构化数据。比如常见的int64、float32都是dtype对象的实例。

np.dtype(object,align,copy)

参数说明:

object:要转换为的数据类型对象

align:如果为True,填充字段使用类似于C的结构体;

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

实例:

import numpy as np

dt = np.dtype(np.bool_)
print(dt)

运行结果:

bool

你可能感兴趣的:(视觉处理,python)