我在上面的变量上运行了上面的循环:
编辑:将foo(x)扩展到函数中。
这是代码:
temp = (B.'*C*B);
for k = 1:n
x = A(:,k);
if(mask(k) == 1)
result(k) = (B.'*C*x)^2 / (temp*(x.'*C*x)); %returns scalar
end
end
请注意,我已经成功使用上面的代码作为parfor循环而不是for。我希望你能够建议某种方式使用meshgrid或排序来提高性能。我不认为我有RAM问题所以解决方案也可能是昂贵的记忆。
非常感谢。
答案 0 :(得分:1)
如果您的foo
承认矩阵输入,则可以执行以下操作:
result = zeros(1,n); % preallocate result with zeros
mask = logical(mask); % make mask logical type
result(mask) = foo(A(mask),:); % compute foo for all selected columns
答案 1 :(得分:1)
试试这个:
result=(B.'*C*A).^2./diag(temp*(A.'*C*A))'.*mask;
通过矩阵乘法进行的矢量化也将确保result
是1xn向量。在您提供的代码中,可能会出现mask
中的最后一个元素为零的情况,在这种情况下,您的代码会将result
截断为较小的长度,而在答案中,它会保留这些元素为零。