Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
使用MATLAB从列向量中提取中间值_Matlab - Fatal编程技术网

使用MATLAB从列向量中提取中间值

使用MATLAB从列向量中提取中间值,matlab,Matlab,我有两个列向量 第一列向量有几千个数据点长,我需要取前四十个项目的中值,然后取下四十个项目的中值,依此类推 第二列向量包含一个组ID(从1到3) 我的目标是最终得到一系列中值计算,并按组对它们进行排序。我很不确定如何在MATLAB中实现这一点。将向量重塑为40xN矩阵,然后使用中值获取每列的中值。将向量重塑为40xN矩阵,然后使用中值获取每列的中值。获取组非常简单: groupIDvec = groupID(1:40:end);% A vector with group numbers 通过使

我有两个列向量

第一列向量有几千个数据点长,我需要取前四十个项目的中值,然后取下四十个项目的中值,依此类推

第二列向量包含一个组ID(从1到3)


我的目标是最终得到一系列中值计算,并按组对它们进行排序。我很不确定如何在MATLAB中实现这一点。

将向量重塑为40xN矩阵,然后使用
中值
获取每列的中值。

将向量重塑为40xN矩阵,然后使用
中值
获取每列的中值。

获取组非常简单:

groupIDvec = groupID(1:40:end);% A vector with group numbers
通过使用
重塑

medianmat = reshape(datavector,40,[]); 
medianvec = median(medianmat); 
现在您只需要对它们进行排序:

[groupIdvec,idx] = sort(groupIDvec)
这是您的排序结果,其中groupIDvec指示每个值所在的组:

result = medianvec(idx);

我手头没有Matlab,因此它可能包含错误,但应该可以。获取组相当容易:

groupIDvec = groupID(1:40:end);% A vector with group numbers
通过使用
重塑

medianmat = reshape(datavector,40,[]); 
medianvec = median(medianmat); 
现在您只需要对它们进行排序:

[groupIdvec,idx] = sort(groupIDvec)
这是您的排序结果,其中groupIDvec指示每个值所在的组:

result = medianvec(idx);

我手头没有Matlab,所以它可能包含错误,但应该是可以的。

这里有一些代码让您开始学习

如果在一个命名变量中有两个向量,并且列数正好可以被40整除,请执行以下操作:

% column 1 = data, column 2 = groupID
test = rand(400,2);

% compute medians of data
medians = median( reshape(test(:,1), 40,[]) );

% make each entry correspond to the correct groupID
medians = repmat(medians, 40,1);
medians = medians(:);
如果数据不能被40整除,请使用简单循环:

N = 40;

test = rand(10*N+4,2);

n = 1;
medians = zeros( ceil(size(test,1)/N), 1 );
for ii = 1:numel(medians)
    if n+N-1 > size(test,1)
        medians(ii) = median(test(n:end,1));
    else
        medians(ii) = median(test(n:n+N-1,1));
    end
    n = n+N;
end
如有必要,可以像以前一样复制


如果将
groupID
放在单独的变量中,或者如何根据
groupID
对这些内容进行排序,则对该代码的调整非常简单

这里有一些代码可以帮助您开始

如果在一个命名变量中有两个向量,并且列数正好可以被40整除,请执行以下操作:

% column 1 = data, column 2 = groupID
test = rand(400,2);

% compute medians of data
medians = median( reshape(test(:,1), 40,[]) );

% make each entry correspond to the correct groupID
medians = repmat(medians, 40,1);
medians = medians(:);
如果数据不能被40整除,请使用简单循环:

N = 40;

test = rand(10*N+4,2);

n = 1;
medians = zeros( ceil(size(test,1)/N), 1 );
for ii = 1:numel(medians)
    if n+N-1 > size(test,1)
        medians(ii) = median(test(n:end,1));
    else
        medians(ii) = median(test(n:n+N-1,1));
    end
    n = n+N;
end
如有必要,可以像以前一样复制


如果将
groupID
放在单独的变量中,或者如何根据
groupID
对这些内容进行排序,则对该代码的调整非常简单

解释此组ID列向量的作用?它是否与为每个元素分配组的元素的第一个向量元素相匹配?您的假设是正确的。请解释此组ID列向量的作用?它是否与元素的第一个向量元素匹配,为每个元素分配一个组?您的假设是正确的。这似乎是一个很好的答案,但我想知道如何将组ID放入这个新矩阵中。这似乎是一个很好的答案,但我想知道如何将组ID放入这个新矩阵中。看起来很棒!你能解释一下关于你的第一段代码,[]是什么意思吗?明白了-未知维度。看起来很棒!你能解释一下关于你的第一段代码,[]是什么意思吗?明白-未知维度。你能解释一下这段代码吗?groupIDvec=groupID(1:40:end);语法如下
从这里开始
您可以执行此大小的步骤
您在这里结束
,其中1当然是第一个元素,end可以用来表示最后一个元素。因此,从向量中取每40个元素。假设每组40个项目都有一个组id,这就是您需要的。您能解释一下这一点吗?groupIDvec=groupID(1:40:end);语法如下
从这里开始
您可以执行此大小的步骤
您在这里结束
,其中1当然是第一个元素,end可以用来表示最后一个元素。因此,从向量中取每40个元素。假设每组40个项目都有一个组id,这就是您需要的。