通俗易懂地理解稀疏性

今天我想与大家探讨的是一个数学和工程学中的重要概念——稀疏性。这个概念可能听起来很抽象,但它实际上贯穿于我们生活中的许多方面。那么,稀疏性到底是什么呢?简单来说,在数学和信号处理领域,一个信号被称为稀疏,指的是它在某个域(例如时间域、频率域或其他变换域)中只有少量的非零元素。

示例

我们通过两个生活中的例子来理解一下。

窗户上的泥

让我们通过一个实际例子来描绘稀疏性。假设你有一扇带有许多小玻璃窗格的窗户。一天,沙尘暴过后,只有几个窗格上沾满了泥土,而其他的还是一尘不染。这些脏窗格像是非零元素,而干净的窗格像是零元素。你的窗户在被污染的“域”上就体现了稀疏性——只有极少数的元素是“活跃”的。
在这里插入图片描述

观察温度

现在让我们从窗户转换到数据。想象你正在测量一天中的温度变化,并每分钟记录一次。你可能会看到温度在大多数时间里保持相对稳定,但在日出和日落时,温度会发生快速变化。如果我们把这个数据集制作成图表,大部分数据点会形成一条直线(这些点可以视为“零”值,因为它们没有信息变化),而只有在日出和日落时的那些点会因温度变化而“跳跃”出来(非零值)。

在这里插入图片描述

在这个例子中,24小时的温度记录在时间域上是稀疏的,因为只有相对较少的点包含大量的信息(即温度变化显著的点)。而在其他时间点,由于温度变化很小,那些数据点并没有提供太多的信息,就像我们窗户上的干净窗格一样。

稀疏性的作用

稀疏性有什么用处呢?其实,在信号处理和数据压缩中,稀疏性是极其重要的。稀疏性使我们能够只保存那些有意义的信息点,并忽略那些“零”信息点,从而有效地减少数据的大小。这就像你在清洁窗户时只需专注于脏的窗格,无需浪费时间擦拭那些已经干净的窗格。

不仅在数据存储方面,稀疏性还在图像处理、医学成像、无线通信等领域中发挥着关键作用。通过利用信号的稀疏性,科学家和工程师能够创建更加高效的算法和技术,以解决现实世界中的问题。

总结

一个信号如果在某个域具有很多“零”值,并且只有少数非零值,我们可以说它在这个域是稀疏的。这种稀疏性是极富价值的,因为它让信息处理、存储和传输更加高效。

例子

数据稀疏性指的是数据中大量元素为零或接近零,这种数据可以通过特殊的数据结构或格式存储,从而减少存储空间。一个常见的方法是运用压缩感知(Compressive Sensing)原理,或者简单地使用稀疏表示方法,例如存储非零元素的位置和值,并忽略零值元素。

下面是一个简单的例子,以及如何在Python中实现数据压缩和解压缩:

示例

例子:假设我们有一个一维数组,里面包含很多的零值元素。

原始数组:[0, 0, 0, 0, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0]

我们可以通过只存储非零元素的位置(索引)和相应的值来压缩这个数组:

压缩表示:[(4, 5), (7, 3), (13, 2)]

Python实现

下面是Python中的一种实现方式:

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 20 09:28:40 2024

@author: 李立宗

公众号:计算机视觉之光

知识星球:计算机视觉之光

"""

def compress_data(data):
    # 压缩数据
    return [(index, value) for index, value in enumerate(data) if value != 0]

def decompress_data(compressed_data, total_length):
    # 解压数据
    data = [0]*total_length 
    for index, value in compressed_data:
        data[index] = value
    return data

# 原始数据
original_data = [0, 0, 0, 0, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0]


# 原始数据
print(f'original Data: {original_data}')


# 压缩数据
compressed_data = compress_data(original_data)
print(f'Compressed Data: {compressed_data}')

# 解压缩数据
decompressed_data = decompress_data(compressed_data, len(original_data))
print(f'Decompressed Data: {decompressed_data}')

执行上述代码后,你会得到以下输出,这展示了如何从原始数据中创建压缩表示,以及如何从压缩数据恢复原始数据:

original Data: [0, 0, 0, 0, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0]
Compressed Data: [(4, 5), (7, 3), (13, 2)]
Decompressed Data: [0, 0, 0, 0, 5, 0, 0, 3, 0, 0, 0, 0, 0, 2, 0]

在这里插入图片描述

注意这只是一个非常基础的压缩方式,现实世界中可能会使用更复杂的压缩算法,比如维护一个更紧凑的数据结构或使用特殊的编码技巧来进一步提高压缩率。

问题

如果说我们的数据不完美,例如,有很多数值其实是0.02这样的数据,不是0.
那他就不是稀疏的了。
这时怎么办呢?
好办,我们直接把接近于零的值处理为0就好了。
这也是一定意义上的 “压缩”了。因为,此时数据能够更好地压缩了。

Python实现

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 20 09:16:15 2024

@author: 李立宗

公众号:计算机视觉之光

知识星球:计算机视觉之光

"""

import numpy as np
import matplotlib.pyplot as plt

# 生成一个稀疏信号
np.random.seed(0)
signal_length = 100
signal = np.zeros(signal_length)
non_zero_indices = np.random.choice(range(signal_length), 10, replace=False)
signal[non_zero_indices] = np.random.randn(10)

print(signal)

# 输出原始数据尺寸大小
original_size = signal.shape
print(f'Original Data Size: {original_size} bytes')

# 绘制原始信号
plt.figure(figsize=(16, 6))
plt.subplot(1, 2, 1)
plt.stem(signal, use_line_collection=True)
plt.title('Original Sparse Signal')

# 压缩信号:设置阈值并保留非零值
threshold = 0.1
compressed_signal = signal * (abs(signal) > threshold)
print(compressed_signal)
# 输出压缩后数据尺寸大小
compressed_size = compressed_signal.shape
print(f'Compressed Data Size: {compressed_size} bytes')

# 绘制压缩后的信号
plt.subplot(1, 2, 2)
plt.stem(compressed_signal, use_line_collection=True)
plt.title('Compressed Signal')
plt.show()

# 打印压缩率
non_zero_count_original = np.count_nonzero(signal)
print(non_zero_count_original)
non_zero_count_compressed = np.count_nonzero(compressed_signal)
print(non_zero_count_compressed)
compression_rate = 1 - non_zero_count_compressed / non_zero_count_original
print(f'Compression Rate: {compression_rate:.2%}')

# 假设我们要从压缩的信号中重构原始信号
# 在这个简单的例子中,重构只是一个未压缩步骤,因为我们没有实施变换
reconstructed_signal = compressed_signal  # 实际应用可能需要复杂的重建过程

示意图

处理后,几乎没有变化。

在这里插入图片描述

输出结果

非常小的数据被“压缩”没了。原来有10个非零值,现在是9个。
在这里插入图片描述

相关博文

理解并实现OpenCV中的图像平滑技术

OpenCV中的边缘检测技术及实现

OpenCV识别人脸案例实战

入门OpenCV:图像阈值处理

我的图书

下面两本书欢迎大家参考学习。

OpenCV轻松入门

李立宗,OpenCV轻松入门,电子工业出版社,2023
本书基于面向 Python 的 OpenCV(OpenCV for Python),介绍了图像处理的方方面面。本书以 OpenCV 官方文档的知识脉络为主线,并对细节进行补充和说明。书中不仅介绍了 OpenCV 函数的使用方法,还介绍了函数实现的算法原理。

在介绍 OpenCV 函数的使用方法时,提供了大量的程序示例,并以循序渐进的方式展开。首先,直观地展示函数在易于观察的小数组上的使用方法、处理过程、运行结果,方便读者更深入地理解函数的原理、使用方法、运行机制、处理结果。在此基础上,进一步介绍如何更好地使用函数处理图像。在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的实例来说明问题,避免使用过多复杂抽象的公式。

本书适合计算机视觉领域的初学者阅读,包括在校学生、教师、专业技术人员、图像处理爱好者。
本书第1版出版后,深受广大读者朋友的喜爱,被很多高校选为教材,目前已经累计重印9次。为了更好地方便大家学习,对本书进行了修订。
在这里插入图片描述

计算机视觉40例

李立宗,计算机视觉40例,电子工业出版社,2022
近年来,我深耕计算机视觉领域的课程研发工作,在该领域尤其是OpenCV-Python方面积累了一点儿经验。因此,我经常会收到该领域相关知识点的咨询,内容涵盖图像处理的基础知识、OpenCV工具的使用、深度学习的具体应用等多个方面。为了更好地把所积累的知识以图文的形式分享给大家,我将该领域内的知识点进行了系统的整理,编写了本书。希望本书的内容能够对大家在计算机视觉方向的学习有所帮助。
本书以OpenCV-Python(the Python API for OpenCV)为工具,以案例为载体,系统介绍了计算机视觉从入门到深度学习的相关知识点。
本书从计算机视觉基础、经典案例、机器学习、深度学习、人脸识别应用等五个方面对计算机视觉的相关知识点做了全面、系统、深入的介绍。书中共介绍了40余个经典的计算机视觉案例,其中既有字符识别、信息加密、指纹识别、车牌识别、次品检测等计算机视觉的经典案例,也包含图像分类、目标检测、语义分割、实例分割、风格迁移、姿势识别等基于深度学习的计算机视觉案例,还包括表情识别、驾驶员疲劳监测、易容术、识别年龄和性别等针对人脸的应用案例。
在介绍具体的算法原理时,本书尽量使用通俗易懂的语言和贴近生活的示例来说明问题,避免使用复杂抽象的公式来介绍。
本书适合计算机视觉领域的初学者阅读,适于在校学生、教师、专业技术人员、图像处理爱好者使用。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/406608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年最值得尝试的创业项目,利用信息差,普通人下班也能做

大家好,我是电商花花。 到了2024年,人们依然在寻找长期可靠的副业项目,但我建议暂时停一下,因为抖音小店这个轻松暴利的副业项目还在等着我们呢。 抖音小店无货源创业项目作为一个轻资产创业项目,操作简单&#xff0…

基于springboot+vue的信息化在线教学平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

018—pandas 生成笛卡尔积排列组合合并多列字符串数据

思路: 本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下(示例): import pandas as pd2.读入数据 代码如下&…

每日一学—由面试题“Redis 是否为单线程”引发的思考

文章目录 📋 前言🌰 举个例子🎯 什么是 Redis(知识点补充)🎯 Redis 中的多线程🎯 I/O 多线程🎯 Redis 中的多进程📝 结论🎯书籍推荐🔥参与方式 &a…

【Ubuntu】解决Ubuntu 22.04开机显示器颜色(高对比度/反色)异常的问题

使用Ubuntu 22.04时强制关机了一下(make -j16把电脑搞崩了),开机后系统显示的颜色异常,类似高对比度或反色,如下图。看着很难受,字体也没办法辨认。还好之前遇到过类似的问题,应该是一个配置文件…

政府采购网有哪些回款方式

政府采购网的回款方式多种多样,具体取决于采购项目的性质、规模以及采购单位与供应商之间的约定。以下是一些常见的政府采购网回款方式: 线上支付:随着电子商务的发展,越来越多的政府采购项目采用线上支付方式。这种方式方便快捷&…

TLS握手证书链的校验

看一遍忘一遍,还是自己写一遍,看看这次能记多久。 在TLS握手过程中,通过证书校验认证服务端的身份和交换加密秘钥,握手完成之后后续就可以进行加密数据传输。 在浏览器地址栏上点击锁的图标,能打开查看证书的详细信息…

猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐

作为一个新养猫的主人,一开始并没有发现对猫咪过敏。直到养了半年才意识到这个问题,而此时我已经和猫咪有了深厚的感情。我不想放弃我的猫咪,但是留着它的话,我经常会因为流眼泪、打喷嚏、眼睛发红等过敏症状而影响日常生活&#…

位运算03 不用加号的加法[C++]

图源:文心一言 上机题目练习整理,位运算,供小伙伴们参考~🥝🥝 网页版目录在页面的右上角↗~🥝🥝 第1版:在力扣新手村刷题的记录~🧩🧩 编辑:梅…

go 1.18 不同目录package引用问题

go 1.18开始使用module了 不同的package在vs code中引用的话 需要先开启 是Go1.11版本之后 推出的版本管理工具 有点类似java的 maven工具 可以引入依赖使用 go env -w GO111MODULEon 先把这个打开 然后在创建的vs code工作目录下 执行 module gomdoule module 模块名 会生…

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0

解决RabbitMQ管理页面异常/不正确的问题

正确的页面:有Channels、Exchanges等 异常/不正确的页面: 问题原因 我的RabbitMQ是用docker安装的,应该不会是安装的环境有问题。 而且MQ的服务确实是启动了,后端能正常使用,并且管理界面的登录页面也是能正常登录的&…

流程图:理解、创建与优化的视觉工具

流程图:理解、创建与优化的视觉工具 引言 在日常生活和工作中,我们经常遇到需要描述一系列步骤或过程的情况。这些步骤可能是制作一杯咖啡、完成一个项目,或者是解决一个复杂的数学问题。流程图,作为一种强大的视觉工具&#xf…

数据同步MySQL -> Elasticsearch

大家好我是苏麟,今天聊聊数据同步 . 数据同步 一般情况下,如果做查询搜索功能,使用 ES 来模糊搜索,但是数据是存放在数据库 MySQL 里的,所以说我们需要把 MySQL 中的数据和 ES 进行同步,保证数据一致(以 MySQL 为主)…

在 Jupyter Notebook 中查看所使用的 Python 版本和 Python 解释器路径

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 我们在做 Python 开发时,有时在我们的服务器上可能安装了多个 Python 版本。 使用 conda info --envs 可以列出所有的 conda 环境。当在 Linux 服务器上使用 which python 命令时&#xff0…

ES通用查询页面使用说明

前言:ES语法比较复杂,需要专门的学习,而且查询工具不太友好, 对公司运维人员使用有点困难,所以花了个时间做了一个页面,方便运维人员使用,如下。 也不难,有兴趣的朋友可以私聊发源码。 开发帮助-ES数据查询 搜索 输入要查看的文档索引,文档类型后点【查询】即可 搜…

Python之Matplotlib

Matplotlib 是一个综合库,用于创建静态、动画、 和交互式可视化 安装 pip install matplotlib 功能 示例 import matplotlib.pyplot as plt plt.figure() plt.plot([1,2,3],[10,20,30]) plt.show() 官方文档: Matplotlib — Visualization with Pyt…

Covalent Network(CQT)发展新里程碑:SOC 2 数据安全认证通过,进一步加强了其人工智能支持

Covalent Network(CQT)现已完成并通过了严格的 Service Organization Control(SOC) 2 Type II 的合规性审计,通过由备受行业认可的机构执行,进一步证明了 Covalent Network(CQT)团队坚定不移地致…

【区块链】智能交易模式下的数据安全流通模型

【区块链】智能交易模式下的数据安全流通模型 写在最前面**区块链智能交易模式概述****数据安全流通的挑战****数据安全流通模型的核心要素****实现数据安全流通的区块链技术****区块链智能交易模式下数据安全流通模型的设计原则****数据安全流通模型的应用案例分析****面临的挑…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(五)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型,由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”(そら sora),即天空之意,以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…