Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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,我需要计算标准化为特定事件(时间0)的时间序列的平均值。 第一列=时间 第二列=感兴趣的数据 A = [ -5 1 ; -4 2 ; -3 3 ; -2 4 ; -1 5 ; 0 6 ; 1 7 ; 2 8 ; 3 9 ; 4 10 ; 5 11 ]; B = [ -3 7 ; -2 6 ; -1 5 ; 0 4 ;1 3 ; 2 2 ; 3 1 ]; 结果应该是 C=[-5NaN;-4NaN;-35NaN;-25NaN;-15;05NaN;15;25NaN;35NaN;4NaN;5N

我需要计算标准化为特定事件(时间0)的时间序列的平均值。 第一列=时间 第二列=感兴趣的数据

A = [ -5 1 ; -4 2 ; -3 3 ; -2 4 ; -1 5 ; 0 6 ; 1 7 ; 2 8 ; 3 9 ; 4 10 ; 5 11 ];   

B = [ -3 7 ; -2 6 ; -1 5 ; 0 4 ;1 3 ; 2 2 ; 3 1 ];
结果应该是 C=[-5NaN;-4NaN;-35NaN;-25NaN;-15;05NaN;15;25NaN;35NaN;4NaN;5NaN]

我把所有的数据放在一个矩阵中,所以B部分的末尾用零填充。我考虑使用查找最长列的索引,然后在找到索引的所有列上使用mean+1。他还没开始工作

由于数据长度不同,索引也不同,如何做到这一点?
谢谢,Stefan

您可以使用以下代码:

[~,i1,i2] = intersect(A(:,1),B(:,1));
B_temp = [A(:,1) nan(size(A,1),1)];
B_temp(i1,:) = B(i2,:);
C = [A(:,1) mean([A(:,2) B_temp(:,2)],2)];
您可以使用您想要的任何插值,但对于两个数据点,
mean
应该可以。输出为:

C =

    -5   NaN
    -4   NaN
    -3     5
    -2     5
    -1     5
     0     5
     1     5
     2     5
     3     5
     4   NaN
     5   NaN

您可以使用以下代码:

[~,i1,i2] = intersect(A(:,1),B(:,1));
B_temp = [A(:,1) nan(size(A,1),1)];
B_temp(i1,:) = B(i2,:);
C = [A(:,1) mean([A(:,2) B_temp(:,2)],2)];
您可以使用您想要的任何插值,但对于两个数据点,
mean
应该可以。输出为:

C =

    -5   NaN
    -4   NaN
    -3     5
    -2     5
    -1     5
     0     5
     1     5
     2     5
     3     5
     4   NaN
     5   NaN

任意数量矩阵的通用解决方案,使用:

这假设,如果所有矩阵的第一列中缺少一个中间值,您也希望该中间值用
NaN
填充。如果要跳过这些值,可以使用

result = accumarray(M(:,1)-min(M(:,1))+1, M(:,2), [],...
    @(x) mean([x; NaN(n-numel(x),1)]), inf);
result = result(~isinf(result));

任意数量矩阵的通用解决方案,使用:

这假设,如果所有矩阵的第一列中缺少一个中间值,您也希望该中间值用
NaN
填充。如果要跳过这些值,可以使用

result = accumarray(M(:,1)-min(M(:,1))+1, M(:,2), [],...
    @(x) mean([x; NaN(n-numel(x),1)]), inf);
result = result(~isinf(result));

请给出一个你想要的结果和你迄今为止尝试过的代码的例子。你能在时间点之间插值吗?我已经添加了结果的外观。仍在使用find indexPlease处理循环,给出了一个您想要的结果和您迄今为止尝试过的代码的示例。您能在时间点之间进行插值吗?我已经添加了结果的外观。仍在使用find indextanks处理2个数据点的循环,这很好。是否对7个或更多数据点也适用?矩阵A到H有所有不同的指数?你基本上可以做到:1。找出哪个数组最大。2.为所有剩余部分生成临时矩阵,如
B_temp
。3.将所有临时矩阵添加到
C
(或
I
)的
mean
中。我找到了函数minterspect,该函数的输出与intersect相同。所以我应该可以从这里开始。谢谢NemesisOkay,太好了。祝你好运。谢谢你提供的2个数据点。这很好用。是否对7个或更多数据点也适用?矩阵A到H有所有不同的指数?你基本上可以做到:1。找出哪个数组最大。2.为所有剩余部分生成临时矩阵,如
B_temp
。3.将所有临时矩阵添加到
C
(或
I
)的
mean
中。我找到了函数minterspect,该函数的输出与intersect相同。所以我应该可以从这里开始。谢谢NemesisOkay,太好了。祝你好运。这比上面提到的解决方案快得多。只需要研究它是如何工作的(我不知道所有的函数),并找到所有数据都对应的索引。这比上面提到的解决方案工作得更快。只需要看看它是如何工作的(我不知道所有的函数),并找到所有数据都对应的索引。