Matlab中PCA的矢量化

Matlab中PCA的矢量化,matlab,vectorization,pca,Matlab,Vectorization,Pca,我有一个3D点坐标的矩阵a,所以a的大小是N乘以3,其中N是点的数量。我在a上搜索了20个邻居,得到了一个索引矩阵idN,它是N乘以21。然后我想计算每个点的PCA,每个点有20个邻居。例如,矩阵A中的第一个点是 pca(A(idN(1,2:end),:)) 我想计算所有的点。我可以用一个循环来做这件事,但当分数很高时,它会非常慢。有没有一种方法可以不使用循环计算pca,或者至少有一种方法可以加快这个过程 循环代码的一部分 idN = knnsearch(A,A,'k',21); result

我有一个3D点坐标的矩阵a,所以a的大小是N乘以3,其中N是点的数量。我在a上搜索了20个邻居,得到了一个索引矩阵idN,它是N乘以21。然后我想计算每个点的PCA,每个点有20个邻居。例如,矩阵A中的第一个点是

pca(A(idN(1,2:end),:))
我想计算所有的点。我可以用一个循环来做这件事,但当分数很高时,它会非常慢。有没有一种方法可以不使用循环计算pca,或者至少有一种方法可以加快这个过程

循环代码的一部分

idN = knnsearch(A,A,'k',21);
result = zeros(N,12);
for i = 1:N
    [coef,~,latent] =  pca(A(idN(i,2:end),:));
    result(i,1:9) = coef(:)';
    result(i,10:12) = latent';
end

请将您的问题显示在一个循环中。我们无法通过阅读你的大脑来了解到目前为止你编写了哪些代码,因此我们无法说明如何改进。添加了代码,谢谢。因为这是一个内置函数的返回,所以我认为没有必要添加。很抱歉,我已经为idNI添加了代码,在我的问题中已经解释了这一点,A是3D点坐标的矩阵。这是输入数据,我不能在这里显示,这些不是代码。例如,我们可以使用A=rand(N,3)。@sean。不幸的是,您不太可能将其矢量化。