主要内容

稀疏矩阵的代码生成

稀疏矩阵在内存中为包含许多零元素的数组提供了有效的存储。稀疏矩阵可以提高性能并减少生成代码的内存使用。稀疏矩阵的计算时间只与非零元素的运算次数有关。

用于创建和操作稀疏矩阵的函数列于稀疏矩阵.要检查代码生成是否支持某个函数,请参阅函数参考页。金宝app代码生成并不支持所有函数的稀疏矩阵输入。金宝app

代码生成的指导方针

使用稀疏构造函数初始化矩阵,以最大化代码效率。例如,要构造一个3 × 3的单位矩阵,使用speye (3)而不是稀疏(眼睛(3))

与对全矩阵进行索引赋值相比,对稀疏矩阵进行索引赋值会产生开销。例如:

S = speye (10);(7) = 42;

在MATLAB®,稀疏矩阵以压缩的稀疏列格式存储。当您向稀疏矩阵中插入一个新的非零元素时,所有后续的非零元素必须逐列向下移动。这些额外的操作会降低性能。

代码生成的局限性

Simulink的代码生成不支持稀疏矩阵金宝app金宝app®信号、参数或数据存储存储器。不支持模拟状态保存和恢复。金宝app

要生成使用稀疏矩阵的代码,必须启用动态内存分配。为了存储不断变化的非零元素及其值,稀疏矩阵在生成的代码中使用了大小可变的数组。要更改动态内存分配设置,请参见在MATLAB函数块中控制可变大小数组的内存分配.由于稀疏矩阵使用可变大小的数组进行动态内存分配,因此限制适应数据同样适用于稀疏矩阵。

您不能将稀疏数据分配给非稀疏数据。生成的代码对稀疏矩阵和完整矩阵使用不同的数据类型表示。要转换稀疏数据和稀疏数据,请使用显式稀疏的完整的转换函数。

您不能定义一个具有竞争性大小规范的稀疏矩阵。当代码生成器在C/ c++中生成相应的数据类型定义时,它会修正稀疏矩阵的大小。以函数为例喷火导致代码生成错误:

函数y = foo (n)% # codegen如果N > 0 y = sparse(3,2);其他的y =稀疏(4,3);结束

代码生成不支持对稀疏矩阵的逻辑索引。金宝app例如,这种语法会导致错误:

S =魔法(3);S(S > 7) = 42;

对于稀疏矩阵,不能通过指定空数组来删除数组元素:

(:, 2) = [];

另请参阅

|||

相关的话题