【发布时间】:2012-09-05 16:51:59
【问题描述】:
我的问题
- 无论如何我可以加快这个计算?
- 是否有更好的算法或实现可用于计算相同的值?
描述算法
我有一个复杂的索引问题,我正在努力以一种有效的方式解决。
目标是计算矩阵w_prime,使用来自相同大小矩阵w、dY 和dX 的值的组合。
w_prime(i,j) 的值计算为mean( w( indY & indX ) ),其中indY 和indX 是dY 和dX 的索引,分别等于i 和j。
这是一个在 matlab 中计算w_prime 的算法的简单实现:
for i = 1:size(w_prime,1)
indY = dY == i;
for j = 1:size(w_prime,2)
indX = dX == j;
w_prime(ind) = mean( w( indY & indX ) );
end
end
性能问题
这个实现在下面的例子中就足够了;但是,在我的实际用例中,w、dY、dX 是 ~3000x3000 和 w_prime 是 ~60X900。这意味着每个索引计算都发生在大约 900 万个元素上。不需要这种实现太慢而无法使用。此外,我还需要运行此代码几十次。
计算示例
如果我想计算w(1,1)
- 找到
dY等于1的索引,另存为indY - 找到
dX的索引等于1,另存为indX
- 找到
indY和indX的交集另存为ind
- 将
mean( w(ind) )保存到w_prime(1,1)
一般问题描述
我有一个由两个向量 X 和 T 定义的设定点,它们都是 1XN,其中 N 约为 3000。此外,X 和 T 的值是分别受区间 (1 60) 和 (1 900) 限制的整数。
矩阵dX 和dT 是简单的距离矩阵,这意味着它们包含点之间的成对距离。即dx(i,j) 等于abs( x(i) - x(j) )。
它们的计算方法是:dx = pdist(x);
矩阵w 可以被认为是一个权重矩阵,描述了一个点对另一个点的影响程度。
计算w_prime(a,b) 的目的是确定X 维度中的a 和T 维度中的b 分隔的点子集之间的平均权重。
这可以表示如下:
【问题讨论】:
-
您好!我想知道您是否可以对需要使用此计算的问题提供更一般的描述(例如寻路 - 需要计算新位置等)。也许可以建议一个更好的算法?
-
哈哈哇!好的,绝对不是我希望的简单问题。当我与我的白板重聚时,我会尝试回到这个问题,哈哈希望其他人可以在此期间帮助你。现在纯粹出于好奇,你为什么要这样做?找到平均影响力的一般目的是什么?我猜是某种数据相关性??
-
每个问题都应该如此详细和精确地描述。