首页 > 其他分享 >计算机视觉2:NumPy模块函数学习

计算机视觉2:NumPy模块函数学习

时间:2024-08-13 19:24:26浏览次数:11  
标签:模块 dtype 数据类型 shape 数组 np 视觉 NumPy ndarray

NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含一个强大的N维数组对象 ndarray、广播功能函数、整合 C/C++/Fortran代码的工具和线性代数、傅里叶变换、随机数生成等功能。

将NumPy包引入,没有的话需要先安装。

import numpy as np

一、ndarray对象

NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。ndarray对象是用于存放同类型元素的多维数组。ndarray中的每个元素在内存中都有相同存储大小的区域。

ndarray内部组成部分:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。

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

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

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

创建ndarray只需要用NumPy的array函数即可:

np.array(object, dtype = None, copy = Ture, order = None, subok = False, ndmin = 0)

  • object表示数组或嵌套的数列;
  • dtype表示数组元素的数据类型;
  • copy表示对象是否需要复制;
  • order表示创建数组的样式,C为行方向,F为列方向,A为任意方向(默认);
  • subok表示默认返回一个与基类类型一致的数组;
  • ndmin指定生成数组的最小维度。

例如:

a = np.array([1, 2, 3, 4 ,5], ndmin = 2)
print(a)

输出;
[[1, 2, 3, 4, 5]]

# 如果ndmin = 1,则输出[1 2 3 4 5]

二、数组属性

NumPy数组的维数称为秩(rank),即轴的数量或数组的维度:一维数组的秩为1,二维数组的秩为2,以此类推。

ndarray对象属性:

  • ndarray.ndim:秩,即轴的数量或维度的数量;
  • ndarray.shape:数组的维度,对于矩阵,就是指n行m列;
  • ndarray.size:数组元素的总个数,相当于.shape中n×m的值;
  • ndarray.dtype:ndarray对象的元素类型;
  • ndarray.itemsize:ndarray对象中每个元素的大小,以字节为单位;
  • ndarray.flags:ndarray对象的内存信息;
  • ndarray.real:ndarray元素的实部;
  • ndarray.imag:ndarray元素的虚部;
  • ndarray.data:包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,因此通常不需要使用这个属性。

三、NumPy函数学习汇总

import numpy as np

1.np.fromfile()

fromfile函数是支持中文路径的。

使用方法:img = cv.imdecode(np.fromfile("山水.jpg, dtype = np.uint8"), -1)

2.np.shape()

使用方法:np.shape(img)     通过shape方法获取图像的高度、宽度和通道数。

import cv2 as cv
import numpy as np

img = cv.imread('test.jpg')

height = np.shape(img)[0]   # 获取高
weight = np.shape(img)[1]   # 获取宽
channles = np.shape(img)[2]  # 获取通道数

# a[:n]代表列表中的第一项到第n项,即shape[0],shape[1],shape[2]
height, weight, channles = np.shape(img)[:3]   

3.np.hstack()和np.array()

hstack函数就是把两个行相同的数组或者矩阵的列从左到右排列起来,也就是把列水平排列起来。声明如下:

np.hstack(tup)

解释:其中,tup是ndarrays数组序列。这里说的数组就是NumPy库的array,比如定义了一个3行5列的二位矩阵数组:

a = np.array([0, 1, 2 ,3 ,4],

                    [5, 6, 7, 8, 9],

                    [10, 11, 12, 13, 14])      # 有时候方括号业可以用圆括号表示

print(a.shape)    # 输出(3,5)

行数是矩阵的高度,列数是矩阵的宽度。

使用hstack函数来合并行数相同的矩阵数组,比如合并两个都是1行的一维数组:

a = np.array((1, 2 ,3))
b = np.array((4, 5, 6, 7))
e = np.hstack((a, b))
print(e)

输出:
array([1, 2, 3, 4 ,5 ,6 ,7])

4.np.zeros()

numpy.zeros(shape, dtype = float, order = 'C')

np.zeros()返回一个给定形状和类型的用0填充的数组。

  • shape表示数组形状;
  • dtype表示数据类型,可选;
  • order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’。

例如:

np.zeros((200, 200))  表示建立一个200行200列的矩阵

5.np.empty()

np.empty()创建一个指定形状、数据类型且未初始化的数组。

numpy.empty(shape, dtype = float, order = 'C')

  • shape表示数组形状;
  • dtype表示数据类型,可选;
  • order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。

例如:

x = np.empty([3, 2], dtype = int)
print(x)

输出结果为:
[[508   0]
 [0     0]
 [0     0]]
# 数组元素为随机值,因为他们未初始化

6.np.ones()

np.ones:创建指定形状的数组,数组元素用1来填充

np.ones(shape, dtype = None, order = 'C')

  • shape表示数组形状;
  • dtype表示数据类型,可选;
  • order表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。

7.np.arange()

np.arange([start, ]stop, [step, ]dtype=None)

  • start:起点值;可忽略不写,默认从0开始
  • stop:终点值;生成的元素不包括结束值
  • step:步长;可忽略不写,默认步长为1
  • dtype:默认为None,设置显示元素的数据类型

不同参数个数情况介绍:

  • 一个参数时,参数值为终点值,起点取默认值0,步长取默认值1。
  • 两个参数时,第一个参数为起点值,第二个参数为终点,步长取默认值1。
  • 三个参数时,第一个参数为起点,第二个参数为终点,第三个参数为步长,其中步长支持小数。

例如:

np.arange(7)          # [0,1,2,3,4,5,6]
np.arange(3,7)        # [3,4,5,6]
np.arange(3,7,2)      # [3,5]


x = np.arange(5, dtype = float)
print(x)

输出结果为:[0. 1. 2. 3. 4.]

https://blog.csdn.net/qq_45154565/article/details/115690186参考:https://blog.csdn.net/qq_45154565/article/details/115690186

8.np.asarray()

类似于numpy.array,但是numpy.asarray参数只有三个,比numpy.array少两个。

numpy.asarray(a, dtype = None, order = None)

  • a:是任意形式的输入参数,可以是列表、列表的元组、元组、元组的元组、元组的列表和多维数组;
  • dtype:表示数据类型,可选;
  • order:表示是否在内容中以行(C)或列(F)顺序存储多维数组,默认是‘C’,分别代表行优先和列优先,在计算机内存中存储元素的顺序。

实例:

x = [1,2,3]
a = np.asarray(x)
print(a)

输出结果为:[1 2 3]


x = [1,2,3]
a = np.asarray(x, dtype = float)
print(a)

输出结果为:[1. 2. 3.]

9.np.frombuffer()

np.frombuffer用于实现动态数组。numpy.frombuffer接受buffer 输入参数,以流的形式读入转化成ndarray对象。

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

  • buffer:可以是任意对象,会以流的形式读入;
  • dtype:表示数据类型,可选;
  • count:表示读取的数据数量,默认为-1,读取所有的数据;
  • offer:表示读取的起始位置,默认为0。

10.np.fromiter()

np.fromiter从可迭代对象中建立 ndarray对象,返回一维数组。

numpy.fromiter(iterable, dtype, count=-1)

  • iterable:表示可迭代对象;
  • dtype:表示返回数组的数据类型,可选;
  • count:表示读取的数据数量,默认为-1,读取所有的数据;

例如:

# 使用range函数创建列表对象
list = range(5)
it = iter(list)

# 使用迭代器创建ndarray
x = np.fromiter(it, dtype = float)
print(a)

输出结果为:[0. 1. 2. 3. 4.]

11.np.linspace()

用于创建一个一位数组。数组是有一个等差数列构成的,原型如下:

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • start:表示序列的起始值;
  • stop:表示序列的终止值;
  • endpoint:如果endpoint为ture,那么该值包含于数列中;
  • num:表示要生成的等步长的样本数量,默认为50;
  • retstep:retstep为True时,生成的数组中会显示间距,反之不显示;
  • dtype:表示ndarray的数据类型。

12.np.logspace()

创建一个于等比数列。原型如下:

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

  • start:代表间隔的起始值;
  • stop:代表以区间为基础的 间隔的停止值;
  • num:表示start和stop范围之间的值数;
  • endpoint:时一个布尔型值。它将stop表示的值作为间隔的最后一个值;
  • base:代表日志空间的底数;
  • dtype:代表数组项的数据类型。

学习书:OpenCV计算机视觉开发实战(基于python)

ps:正在努力学习中,为待完成...

标签:模块,dtype,数据类型,shape,数组,np,视觉,NumPy,ndarray
From: https://blog.csdn.net/KingGodZ/article/details/141157654

相关文章

  • 24.python模块
    python中的模块(一)模块的介绍1、python中模块:模块也是一个python文件,也叫.py文件2、一个模块中包含:类、函数、变量、方法等3、模块的结构:4、一个模块能够有逻辑的组织python的代码段二、模块的导入1、import模块名importtimeprint(1)time.sleep(5)print(2)2、fro......
  • 大话Numpy(一)数组——升级的List
    摘要以实例为导向,用一种简单易懂的方式介绍Numpy。笔者直接将numpy的方法写入目录,便于查询。参考文档:https://numpy.org/doc/stable/user/index.htmlhttps://numpy.org/doc/stable/user/absolute_beginners.htmlhttps://edu.csdn.net/job/pythonbe_02/python-3-195To:......
  • Python 开发环境的准备以及一些常用类库模块的安装
    在学习和开发Python的时候,第一步的工作就是先准备好开发环境,包括相关常用的插件,以及一些辅助工具,这样我们在后续的开发工作中,才能做到事半功倍。下面介绍一些Python开发环境的准备以及一些常用类库模块的安装和使用的经验总结,供大家参考了解。1、开发VScode的安装及相关准备在......
  • 使用Pandas和NumPy实现数据获取
    公众号本文地址:https://mp.weixin.qq.com/s/Uc4sUwhjLTpOo85ubj0-QA以某城市地铁数据为例,通过提取每个站三个月15分钟粒度的上下客量数据,展示Pandas和Numpy的案例应用。数据:http://u6v.cn/5W2i8Hhttp://u6v.cn/6hUVjk初步发现数据有三个特点::1、地铁数据的前五行是无效的,......
  • 【SPIE出版】第四届计算机视觉、应用与算法国际学术会议(CVAA 2024)
    计算机视觉、应用与算法的领域,一直在飞速发展,第四届计算机视觉、应用与算法国际学术会议(CVAA2024) 将汇聚世界各地的顶尖学者、研究人员和企业代表,共同分享和交流计算机视觉在各个领域的最新研究成果、技术突破和产业应用。我们希望本次会议的成果能对计算机科学领域的知识做......
  • Linux设备驱动——模块的构造、运行与设计 与众不同的hello world与点灯
    编写一个Linux下的设备驱动,首先要准备好对应内核版本的内核源码树文件。该系列的全部文章都以嵌入式系统的ARM-Linux的环境进行阐述,并以交叉编译的方式在主机Ubuntu20.04系统上编译和ARM开发板上跑测 (E2000Q、H616、或者IMX6ULL看情况交叉着使用) 关于交叉编译的配置,以往......
  • YOLOv8开源揭秘:AI视觉技术在智能设备与系统全景应用
    目录一、引言二、YOLOv8模型简介三、YOLOv8的功能特性四、YOLOv8应用场景五、代码示例示例一:对图像进行目标检测示例二:对视频进行目标检测示例三:批量处理图像文件夹示例四:自定义模型进行目标检测示例五:实时摄像头目标检测示例六:获取目标检测的详细信息六、结语一......
  • Python中yaml模块的使用教程
    一、yaml文件介绍yaml是一个专门用来写配置文件的语言。1.yaml文件规则区分大小写;使用缩进表示层级关系;使用空格键缩进,而非Tab键缩进缩进的空格数目不固定,只需要相同层级的元素左侧对齐;文件中的字符串不需要使用引号标注,但若字符串包含有特殊字符则需用引号标注;注释标识......
  • Python time模块与datetime模块的区别
    时间方面的编程在开发过程中是很常见的,而Python提供了datetime和time这两个关于时间的模块。接下来,我们将讨论这两个模块中的函数有什么区别。time模块:如果你想要获取当前的本地时间,那么首先你需要运行time.time()来获取当下的时间戳。importtime#获取目前的时间戳ti......
  • 多模块 Spring 项目构建
    在一个多模块的Spring项目中,父模块通常被定义为一个pom.xml文件,包含所有子模块的公共配置、依赖和插件。子模块通过继承父模块的pom.xml文件,来共享和管理这些公共依赖和版本信息。实现步骤创建父模块(ParentModule):在父模块的pom.xml中,定义所有的依赖管理和版本控制......