如何在C(MATLAB MEX)中加速绝对损失矩阵的计算?
优化蒙特卡洛实验中绝对损失函数的计算速度(MEX/C实现)
背景
我正在运行蒙特卡洛实验,评估绝对损失函数。由于计算量极大,希望进一步优化代码以提升速度。主代码采用MATLAB编写,但通过MATLAB的MEX功能在C语言中实现损失函数的核心计算。
数学问题定义
- 输入矩阵:维度为M×N的矩阵D,其中M约为20000,N的取值为{10, 30, 144}
- 输出向量:维度为M×1的列向量L,其计算逻辑为:对每个索引i,L[i]等于所有j(j遍历1到M)对应的D第j行与第i行逐元素绝对差之和的平均值——先累加每行j与行i的绝对差总和,再将所有j的结果求和,最后除以M得到平均值。
当前C语言实现代码
void absolute_loss(double *D, double *L, mwSize cols, mwSize rows) { double aux; int i; int j; int k; for (i = 0; i < rows; i++) { for (j = 0; j < rows; j++){ aux = 0; for (k = 0; k < cols; k++) { aux = aux + fabs(D[j + rows * k] - D[i + rows * k]); } L[i] = L[i] + aux; } } for (i = 0; i < rows; i++) { L[i] /= rows; } }
内容的提问来源于stack exchange,提问作者andro1666
相关产品推荐
相关产品推荐

