我有一个大小为54000 x 1的矢量A和大小为54000 x 1的矢量B,它是A元素的标准偏差。另一方面,我有矢量C,大小为300000 x 1.现在我想要找到向量C的每个元素对应于向量A的哪一行具有可接受的范围3 *标准偏差?我写了下面的代码,它适用于小矢量,但对于大型矢量,我觉得它太慢了!!
for i=1:length(A)
L=A(i,1)- 3*B(i,1);
U=A(i,1)+ 3*B(i,1);
inds{i,1} = not(abs(sign(sign(L - C) + sign(U - C))));
end
有谁知道如何更快地制作此代码或者是否有人知道其他解决方案? THX。
答案 0 :(得分:0)
MATLAB是Matrix Laboratory的首字母缩写,旨在简化并加速矩阵(矢量)计算。与C或任何其他编程语言相比,使用矩阵时通常可以跳过for循环。对于您的代码,您应该能够跳过for循环并按此执行:
L = A - 3*STD;
U = A + 3*STD;
inds = not(abs(sign(sign(L - C) + sign(U - C))));
请记住i
表示Matlab中的复数。不知道它是否会影响速度。
编辑:
将结果作为单元格获取:
inds = num2cell(inds)