Numpy入门

Numpy入门,第1张

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或数组接口的对象的视图。


内部结构示意图:

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


创建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()函数来改变数组的行数和列数。


实例:

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/568717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存