MATLAB不使用循环,确定方差是否高于阈值,返回1或0

lvjbypge  于 6个月前  发布在  Matlab
关注(0)|答案(1)|浏览(86)

我试着用MATLAB写这个程序,在不使用循环的情况下,我需要一个有3行和未知列数的数组。
我们获取这个数组,并找到每一列的方差。如果方差大于阈值,那么我们将输出数组中相应的列设置为1。
这是我目前所拥有的:

% vec_acc_total is my array with 3 rows

var = var(vec_acc_total, 0, 1);

walking_segments_no_loops = zeros(size(var));
walking_segemnts_no_loops(var >= THRESHOLD) = 1

字符串
然而,这是错误的,希望任何帮助,将不胜感激。我知道这是错误的,因为它被返回后,它是通过一个验证程序(提供给我),将确认或否认。
我在MATLAB中使用VARIANCE函数也有潜在的问题。我需要找到每列的方差。
我尝试过以下方法:

walking_segments_no_loops = var >= THRESHOLD


也没有返回正确的值

kcrjzv8t

kcrjzv8t1#

当您运行

var = var(vec_acc_total, 0, 1);

字符串
您正在使用您的变量var删除内置函数var。所有后续对var()(函数)的调用都将出错,直到您从工作区中清除var(变量)。
因此,运行clear来清理并防止任何阴影,然后选择一个新的变量名,例如。

v = var(vec_acc_total, 0, 1);


v是一个1xN数组,其中var_acc_total是一个3xN矩阵,这直观地告诉我们已经计算了每列的方差。
您可以直接检查这是否超过阈值,而无需初始化数组:

walking_segments_no_loops = (v >= THRESHOLD);


这将输出一个与v大小相同的逻辑数组,当大于或等于阈值时为true (1),否则为false (0)。如果您希望此值为数值而不是逻辑,则可以通过使用例如double() Package 来转换它。
请注意,在你的问题中,你是这样说的(强调我的):
如果方差大于阈值,那么我们将输出数组中相应的列设置为1。
也许你想使用>而不是>=来检查严格不等式。

相关问题