我的问题
- 无论如何,我可以加快这个计算吗?
- 是否有更好的算法或实现可用于计算相同的值?
描述算法
我有一个复杂的索引问题,我正在努力以一种有效的方式解决。
目标是使用来自相同大小矩阵、和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
are ~3000x3000
和w_prime
is ~ 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)
分隔的点的子集之间的平均权重。a
X
b
T
这可以表示如下: