- 博客(118)
- 资源 (3)
- 收藏
- 关注
原创 使用Google Protobuf序列化(serialize)结构数据
Google Protobuf是一种高效、跨平台的结构化数据序列化机制,相比JSON/XML更节省空间和处理时间。其主要特征包括:紧凑二进制格式、语言/平台无关性、前后兼容性和强类型检查。使用步骤为:1) 定义.proto文件描述数据结构;2) 用protoc编译器生成目标语言代码。示例展示了包含嵌套消息和枚举类型的Person/Address消息定义,并说明如何编译生成C++代码。Protobuf通过字段编号优化编码效率,支持单数和重复字段,是构建分布式系统的理想工具。
2025-11-30 11:13:07
1032
原创 TensorFlow Keras
TensorFlow Keras 指的是将 Keras API 集成到 TensorFlow 框架中。Keras 最初是一个独立的,用于构建和训练深度学习模型的高级 API,现在已成为 TensorFlow 的官方高级 API。TensorFlow Keras 的关键:高级 API:Keras 提供了一个用户友好且直观的接口,用于定义、训练和评估深度学习模型,并抽象化了底层 TensorFlow 操作的大部分复杂性。
2025-11-04 12:00:21
577
原创 C++并行处理支持库 之六
通过使用Futures标准库,我们可以获取异步任务返回值,捕获异步任务引发的异常。异步任务就是在独立线程中启动运行的函数。这些值以共享状态进行通信,其中异步任务可以写入其返回值,或存储异常,并且可以其他线程检查、等待或以其他方式操作,这些线程包含std::future或std::shared_future实例,而std::future或std::shared_future引用该共享状态。
2025-01-01 11:00:53
465
原创 C++并行处理支持库 之五
当控制权离开创建scoped_lock对象的作用域时,scoped_lock将被破坏,并释放互斥锁。锁定shared_lock会在共享模式下,锁定关联的共享mutex,要在独占模式下锁定它,可以使用std::unique_lock。scoped_lock类是一个mutex包装器,它提供了一种方便的RAII风格的机制,用于在作用域块的持续时间内,拥有零个或多个mutex。lock_guard 类是一个互斥锁包装器,它提供了一种方便的RAII样式机制,用于在作用域块的持续时间内,拥有互斥锁。
2025-01-01 09:01:06
1021
原创 C++并行处理支持库 之四
条件变量是一个同步原语,允许多个线程相互通信。它允许一定数量的线程等待(可能超时)来自另一个线程的通知,它们可以继续。条件变量始终与互斥锁相关联。std::condition_variable 是一种与 std::mutex 一起使用的同步原语,用于阻止一个或多个线程,直到另一个线程修改共享变量(条件),并通知 std::condition_variable。获取 std::mutex(通常通过 std::lock_guard)。在拥有锁的情况下修改共享变量。
2024-12-31 12:34:42
953
原创 C++并行处理支持库 之二
std::atomic模板的每个实例化和完全特化都定义了一个原子类型。如果一个线程写入原子对象,而另一个线程从中读取,则行为是良定义的。此外,对原子对象的访问可以建立线程间同步,并按照 std::memory_order 指定的顺序,对非原子内存访问进行排序。原子操作是为细粒度操作提供的,允许无锁并发编程。每个原子操作对于涉及同一对象的任何其他原子操作都是不可分割的。std::atomic 既不可复制,也不可移动。下列代码说明几个atomicAPIs如何使用。原子对象不存在数据竞争。
2024-12-19 10:57:24
508
原创 C++并行处理支持库 之一
类线程代表单个执行线程。线程允许多个函数同时执行。线程在构造关联的线程对象后立即开始执行(等待任何操作系统调度延迟),从作为构造函数参数提供的顶级函数开始。顶级函数的返回值将被忽略,如果它通过抛出异常而终止,则调用 std::terminate。顶级函数可以通过 std::promise 或通过修改共享变量(这可能需要同步,请参阅 std::mutex 和 std::atomic)向调用者传达其返回值或异常。
2024-12-19 10:56:51
533
原创 C++动态内存管理 之一
在默认初始化范围 [first, last) ,指定的未初始化存储中构造 typename std::iterator_traits::value_type 类型的对象。该将 [first, last) 范围内的元素复制到从 d_first 开始的未初始化内存区域。如果包括policy参数,则按照policy执行。将元素从 [first, last) 范围移动到从 d_first 开始的未初始化内存区域。下面代码将初始化存储器区域到约定值。上述代码运行屏幕输出。上述代码运行屏幕输出。上述代码运行屏幕输出。
2024-12-03 12:49:15
852
原创 C++ 智能指针smart pointer 之二
当通过调用std::make_shared或std::allocate_shared创建shared_ptr时,控制块和托管对象的内存都是通过单个分配创建的。此函数调用的 std::shared_ptr 构造函数启用带有指向新构造的T类型对象的指针的 shared_from_this。std::shared_ptr 是一个智能指针,它通过指针保留对象的共享所有权。Shared_ptr 直接持有的指针是 get() 返回的指针,而控制块持有的指针/对象是当共享所有者数量为零时将被删除的指针/对象。
2024-12-03 12:48:32
1153
原创 BLDC与PMSM电机
由于采用永磁转子,它们还具有更高的扭矩、更小的机架尺寸和无转子电流,所有这些都是相对于交流感应电机 (AICM) 的优势。它们还可以使用钕磁铁,并且可以是外转子(定子被转子包围)、内转子(转子被定子包围)或轴向(转子和定子平坦且平行)。当 BLDC 电机的定子绕组连接到开关电路(或控制电路)时,它会为定子绕组供电。现在,转子磁体倾向于与通电的定子绕组(充当电磁体)对齐,一旦对齐,下一个定子绕组(定子电磁体)就会通电。定子的旋转磁场与转子的磁场相互作用,即转子极与定子的旋转磁场锁定,并开始以同步速度旋转。
2024-11-30 04:38:46
1780
原创 C++ 智能指针smart pointer 之一
如果T是某个基B的派生类,则 std::unique_ptr 可以隐式转换为 std::unique_ptr<B>。生成的 std::unique_ptr<B> 的默认删除器将使用 B 的删除运算符,从而导致未定义的行为,除非 B 的析构函数是虚拟的。std::unique_ptr 是一个智能指针,它通过指针拥有并管理另一个对象,并随后在 unique_ptr 超出范围时,处置该对象。下列程序实例说明如何释放std::unique_ptr指针和std::unique_ptr指向的对象。
2024-11-30 04:33:58
1068
原创 Python库numpy之七
两个结构化数组之间的赋值,就好像将源元素转换为元组,然后赋值给目标元素一样。也就是说,源数组的第一个字段将赋值给目标数组的第一个字段,第二个字段赋值给目标数组的第二个字段,依此类推。两个结构化数组的字段名称不同,不影响赋值。具有不同字段数的结构化数组不能互相赋值。为结构化数组赋值的最简单方法是使用 python 元组。元组的元素从左到右赋值数组的连续字段。结构化数组也可以赋值给非结构化数组,只要结构化数据类型只有一个字段。赋值给结构化元素的标量将赋值给所有字段。非结构化数组赋值给结构化数组。
2024-10-29 13:53:40
732
原创 Python库numpy之六
该字典有两个必需的键,“名称”和“格式”,以及四个可选的键,“偏移量”,“域大小”,“对齐”和“标题”。在字段之间插入填充字节,以便每个字段的字节偏移量将是该字段对齐的倍数,对于简单数据类型,该对齐通常等于字段的字节大小。fieldname 是一个字符串(如果使用标题,则为元组,请参阅下面的字段标题),datatype 可以是可转换为数据类型的任何对象,shape 是指定子数组形状的整数元组。结构化数组是 ndarray,其数据类型是,更简单数据类型构成的,被命名的字段序列的组合。
2024-10-29 13:53:19
916
原创 Python库numpy之五
某些类型,例如 numpy.int_ 和 numpy.intp,具有不同的位数,具体取决于平台,例如 32 位与 64 位 CPU 架构。NumPy 知道 int 指的是 numpy.int_,bool 指的是 numpy.bool,float 指的是 numpy.float64,complex 指的是 numpy.complex128。以上都是固定宽度的数据类型。可以使用 numpy 顶级API中的标量类型创建具有指定 dtype 的数组,例如numpy.bool、numpy.float32 等。
2024-10-20 04:15:35
1141
原创 Python库matplotlib之十二
bool, 如果为 True,则将启用拾取,并且如果鼠标事件位于artist上方,artist将触发拾取事件。设置 pickradius 将添加一个以点为单位的 epsilon 容差,如果其数据在鼠标事件的 epsilon 范围内,artist将触发一个事件。对于某些artist,如线条和补丁集合,artist可以向生成的拾取事件提供附加数据,例如,拾取事件的 epsilon 内的数据索引。函数, 如果选择器是可调用的,则它是用户提供的函数,用于确定artist是否被鼠标事件击中。
2024-10-19 07:58:26
527
原创 Python库matplotlib之十一
下列程序运行时,滚动鼠标的滚轮,on_scroll函数被调用,依据滚轮的滚动方向,参数w被加1,或减1。当鼠标进入Axes,特定的Axes中, timer控制sin的相位角,引起波形变化。下列程序通过处理figure和Axes进入和离开事件,控制sin函数的波形显示。参数w改变,引起sin波形变化。
2024-10-19 04:55:07
346
原创 Python库matplotlib之十
下列代码,当用户点击关闭窗口时,调用关闭回调函数on_close。这给程序员在窗口关闭之前,做一些cleanup工作, 比如,关闭文件,TCP/IP端口等。下列运行时,当用户点击鼠标的左键,一条竖线随鼠标移动;当用户点击右键时,竖线停止移动。再次点击左键,竖线再次随鼠标移动。下列程序检测四个键x,y,+ 和 -。x和y改变正弦曲线的画线方式和颜色, +和-改变正弦曲线的相位角。下列的例子通过连接移动和单击事件与绘图画布进行交互的例子。
2024-10-18 23:58:38
391
原创 Python库numpy之三
词法:numpy.eye(N, M=None, k=0, dtype=<class ‘float’>, order=‘C’, *, device=None, like=None)numpy.eye产生一个二维数组,对角线上的值为 1,其他位置的值为0。order,该参数类型是{‘C’, ‘F’}, 是可选的。dtype,该参数类型是data-type, 是可选的。like,该参数类型是array_like, 是可选的。M,该参数类型是int, 是可选的。k,该参数类型是int, 是可选的。
2024-10-17 00:32:02
1172
原创 Python库numpy之二
词法:numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None, axis=0)仅当参数start,stop,或base是类数组时,才相关。词法:numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None, axis=0)如果endpoint不是False,则stop是列的结束值。如果endpoint不是False,则stop是列的结束值。
2024-10-12 10:58:07
1194
原创 Python库numpy之一
词法:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0, *, device=None)一维数组创建函数,例如numpy.linspace 和 numpy.arange,通常需要至少两个输入,start和stop。如果retstep为True,则该函数返回两个值,即 (samples, step),其中 step 是样本之间的间距。endpoint,该参数类型是bool, 是可选的。
2024-10-12 09:04:10
1277
原创 Python库matplotlib之九
ArtistAnimation是TimedAnimation的子类,它使用一组固定的Artist对象创建动画。Matplotlib基于其绘图功能,还提供了一个使用动画模块,生成动画的接口。动画是一系列帧,其中每个帧对应于图形上的一个图。artists是一个list,list的每个条目都是Artist对象的集合,它将在相应帧上可见。如果参数repeat为True,则它是连续动画运行之间的以毫秒为单位延迟。该参数确定,当帧序列完成时,动画是否重复。repeat,该参数类型是bool, 默认值为True。
2024-10-12 02:40:02
853
原创 Python库matplotlib之六
词法:matplotlib.animation.FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, cache_frame_data=True, **kwargs)该函数的第一个参数将是frames参数的下一个值。在所有参数类型情况下,frames中的值只是简单地传递给用户提供的函数,因此可以是任何类型。blit == False,则返回值不被使用,并且在这种情况下可以被省略。
2024-10-11 23:58:17
1420
原创 Python库matplotlib之七
使用参数labeldistance,分别改变改变楔形图标注位置;使用参数rotatelabels,改变楔形图标注的角度。每个楔形的分数面积由 x/sum(x) 给出。默认情况下,从 x 轴开始,逆时针绘制楔形。绘制饼图,并标记楔形图。要添加标签,将标签列表传递给labels参数。使用参数pctdistance,改变autopct 文本位置。将函数或格式字符串传递给 autopct 以标记切片。使用参数colors,设置 楔形图的颜色。
2024-10-09 09:18:20
813
原创 Python库pandas之七
不是有效的属性字典,因为“asdf”不是有效的HTML属性,即使它是有效的XML属性。该字典的键可以是整数或列标签,值是采用一个输入参数、单元格(而不是列)内容并返回转换后的内容的函数。用于解码网页的编码。是一个有效的属性字典,因为“id”HTML 标签属性对于本文档中的任何HTML标签来说,都是有效的 HTML 属性。flavor,该参数类型是{“lxml”, “html5lib”, “bs4”} 或i类似list, 是可选的。该参数是用于制作列标题的行,该参数也可以用于MultiIndex的行列表。
2024-10-07 05:56:07
1168
转载 Python库pandas之五
如果“infer”和“path_or_buf”是类似路径,则检测以下扩展名的压缩:“.gz”、“.bz2”、“.zip”、“.xz”、“.zst”、“.tar” 、“.tar.gz”、“.tar.xz”或“.tar.bz2”。path_or_buf,该参数类型是字符串, 文件路径对象, 有类似文件特征的对象, 或None, 默认值为None。如果该参数是一个非二进制文件对象,则应使用 newline=‘’ 打开它,禁用通用换行符。mode,该参数类型是{‘w’, ‘x’, ‘a’}, 默认值为‘w’
2024-10-05 13:00:01
855
原创 Python库pandas之六
词法:pandas.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None, dtype_backend=<no_default>, dtype=None)如果传递的是表而不是查询,则忽略该参数。dtype_backend,该参数类型是{‘numpy_nullable’, ‘pyarrow’}, 默认值为‘numpy_nullable’
2024-10-05 00:08:48
1010
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅