强大的Numpy - (Numpy基础知识 1) - 快看看你有那些不知道


学习内容来自菜鸟教程, 感谢菜鸟教程 🙇‍,如内容对您有帮助,欢迎点赞

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的安装

  • 使用pip:pip install numpy scipy matplotlib
  • 安装成功验证:
import numpy as np # 引入numpy数组
a = np.array([1,2,3,4])
print(a)
[1 2 3 4]

Numpy Ndarray对象

  • NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

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

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

  • ndarray 内部由以下内容组成:

    • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
    • 数据类型或 dtype,描述在数组中的固定大小值的格子。
    • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
    • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。
  • 创建一个 ndarray 只需调用 NumPy 的 array 函数即可:

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
  • 参数说明
参数名称参数描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度
a = np.array([1, 2, 3, 4]) # 创建一维数组  
print(a)
[1 2 3 4]
a = np.array([[1,  2],  [3,  4]]) # 创建多维数组
print(a)
[[1 2]
 [3 4]]
a = np.array([1, 2, 3, 4], ndmin = 2); # 指定维度
print("value:", a)
print("shape:" ,a.shape)
value [[1 2 3 4]]
shape: (1, 4)
a = np.array([1, 2, 3], dtype = complex) # 指定数据类型
print("value:", a)
print("type:", a.dtype)
value: [1.+0.j 2.+0.j 3.+0.j]
type: complex128
  • ndarray 对象由计算机内存的连续一维部分组成,并结合索引模式,将每个元素映射到内存块中的一个位置。内存块以行顺序(C样式)或列顺序(FORTRAN或MatLab风格,即前述的F样式)来保存元素。

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,等等。

数据类型对象 (dtype)

  • 数据类型对象是用来描述与数组对应的内存区域如何使用,这依赖如下几个方面:
    • 数据的类型(整数,浮点数或者 Python 对象)
    • 数据的大小(例如, 整数使用多少个字节存储)
    • 数据的字节顺序(小端法或大端法)
    • 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
    • 如果数据类型是子数组,它的形状和数据类型
  • 字节顺序是通过对数据类型预先设定"<“或”>“来决定的。”<“意味着小端法(最小值存储在最小的地址,即低位组放在最前面)。”>"意味着大端法(最重要的字节存储在最小的地址,即高位组放在最前面)。
  • dtype 对象是使用以下语法构造的:
np.dtype(object, align, copy)
  • object - 要转换为的数据类型对象
  • align - 如果为 true,填充字段使其类似 C 的结构体。
  • copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
# 使用内置类型
dt = np.dtype(np.int32) 
print(dt)
int32
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i4')
print(dt)
int32
import numpy as np
# 字节顺序标注
dt = np.dtype('<i4')
print(dt)
int32
# 自定义结构化数据类型
dt = np.dtype([('name', str, 40),('age',np.int8)]) 
print('value:', dt)
value: [('name', '<U40'), ('age', 'i1')]
# 自定义结构化数据类型并应用于 ndarray 对象
dt = np.dtype([('name', str, 40),('age',np.int8)]) 
a = np.array([('alice', 18),('bob', 20),('jack', 19)], dtype = dt)
print('value:', a)
print('type:', a.dtype)
value: [('alice', 18) ('bob', 20) ('jack', 19)]
type: [('name', '<U40'), ('age', 'i1')]
# 类型字段名可以用于存取单独一列
dt = np.dtype([('name', str, 40),('age',np.int8)]) 
a = np.array([('alice', 18),('bob', 20),('jack', 19)], dtype = dt)
print('value:', a)
print('type:', a.dtype)
print('names:', a['name'])
print('age:', a['age'])
value: [('alice', 18) ('bob', 20) ('jack', 19)]
type: [('name', '<U40'), ('age', 'i1')]
names: ['alice' 'bob' 'jack']
age: [18 20 19]

学习内容来自菜鸟教程, 感谢菜鸟教程 🙇‍,如内容对您有帮助,欢迎点赞

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值