我需要有关计算某些数据的加权几何平均值的优化和性能问题的帮助。
我用一个小样本来介绍这个问题。我为下面的简单示例编写了计算 WGM 的代码。
% A matrix Example 3x3 matrix
% w column vector 3x1
% wgm row vector 1x3
A = rand(3);
w = [1,2,6]';
wgm = (prod(A.^w)).^(1/sum(w));
现在解决一般问题:
假设我有一个大小为 nxm 的新 A 矩阵 和一个由权重列组成的 W 矩阵,其中权重值可以从 0 到 k 并且我需要所有列排列。
也就是说,W 矩阵的大小为 nxk^n,因为权重的性质和加权几何计算应该减少这个最终矩阵,不包括表示乘以从 0 到 k 排列的标量值的列。
因此,如果我已经有一个像 [1, 1, 0] 这样的列,它应该排除所有 t*[1,1,0] 并且 t 从 0 到 k。另一个例子:[1 2 3] 应该排除 [2 4 6] 或 [3 6 9] 等等。
基本思想:W 矩阵的每个生成列都可以归一化每个权重除以 k,因此如果新的归一化列是冗余的,则不应添加然后转换回 uint8 列以将内存消耗减少到 12.5%。
因此,考虑一个真实的数据示例假设:
- 我有一个 32x30 的静态 A 矩阵。
- 权重值从 0 到 99。
- 我需要一种方法来创建大小为 32x100^32 的 W 矩阵并对其进行优化。
- 计算优化的原始 WGM 100^32x30 矩阵,其中每一行是 A 矩阵和相应 W 列的计算结果。
所以要解决的问题是:
- 在大小和性能方面创建优化的权重矩阵。
- WGM 矩阵的计算。
- 一种分配和分区这些矩阵以避免内存问题的方法。
- 将 Matlab 代码转换为 GPU 代码以在Cuda 设备(1080 GTX 和 8 GB 视频内存)上进行计算。
- 以有效的方式存储最终矩阵。
补充资料:
加权几何平均值矩阵数据将通过一组更严格的规则进行验证,因此不符合要求的行将被丢弃,对于最终的 W 矩阵也是如此,其中相应列将发生消除。
这可以在创建 2 个矩阵时更早地进行评估,以找到优化内存消耗同时可能降低性能的解决方案。