Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何优化此索引算法 我的问题 我是否可以加快计算速度 是否有更好的算法或实现,我可以用来计算相同的值 描述算法_Algorithm_Matlab_Indexing - Fatal编程技术网

Algorithm 如何优化此索引算法 我的问题 我是否可以加快计算速度 是否有更好的算法或实现,我可以用来计算相同的值 描述算法

Algorithm 如何优化此索引算法 我的问题 我是否可以加快计算速度 是否有更好的算法或实现,我可以用来计算相同的值 描述算法,algorithm,matlab,indexing,Algorithm,Matlab,Indexing,我有一个复杂的索引问题,我正在努力以有效的方式解决 目标是使用大小相等的矩阵w、dY和dX中的值的组合来计算矩阵w\u prime w_素数(i,j)的值计算为平均值(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 ==

我有一个复杂的索引问题,我正在努力以有效的方式解决

目标是使用大小相等的矩阵
w
dY
dX
中的值的组合来计算矩阵
w\u prime

w_素数(i,j)
的值计算为
平均值(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\u prime
是~
60X900
。这意味着每次指数计算都是在大约900万个元素上进行的。不用说,这个实现太慢,无法使用。此外,我还需要运行这段代码几十次

实例计算 如果我想计算w(1,1)

  • 找到等于1的
    dY
    索引,另存为
    indY
  • 找到等于1的
    dX
    索引,另存为
    indX

  • 查找
    indY
    indX
    的交点,另存为
    ind

  • 平均值(w(ind))
    保存到
    w_素数(1,1)

一般问题描述 我有一个由两个向量定义的设定点
X
,和
T
,两者都是1XN,其中N是~3000。此外,X和T的值是分别由区间(160)和(1900)限定的整数

矩阵
dX
dT
只是距离矩阵,这意味着它们包含点之间的成对距离。Ie
dx(i,j)
等于
abs(x(i)-x(j))

它们使用以下公式计算:
dx=pdist(x)

矩阵
w
可以被认为是描述一个点对另一个点有多大影响的权重矩阵

计算
w_素数(a,b)
的目的是确定由
X
维度中的
a
T
维度中的
b
分隔的点子集之间的平均权重

这可以表示为:


这一点非常简单:

如果没有相应的索引对,输出将是一个大小为nx
-by-
ny
的数组,带有NaNs。如果您确信将一直有完整的索引,您可以将上述计算简化为

w_prime = accumarray([dX(:),dY(:)],w(:),[],@mean)

那么,accumarray做什么?它查看
[dX(:)、dY(:)]
的行。每行给出该行所贡献的
(i,j)
w_prime中的坐标对。对于所有对
(1,1)
,它将函数(
@mean
)应用于
w(:)
中的相应条目,并将输出写入
w_prime(1,1)

你好!我想知道您是否可以对需要使用此计算的问题提供更一般的描述(例如,寻路-需要计算新位置,等等)。也许总的来说可以建议一个更好的算法?哈哈哇!好吧,这绝对不是我所希望的简单问题。当我与我的白板lol重聚时,我会尝试回到这个话题,希望在此期间有其他人可以帮助你。纯粹出于好奇,你为什么要这么做?找到平均影响力有什么普遍意义?我在猜测某种数据关联??每个问题都应该以如此详细和精确的方式来描述。我想和MATLABPerfect的创造者一起生孩子!这正是我要找的!
w_prime = accumarray([dX(:),dY(:)],w(:),[],@mean)