Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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,我在MATLAB(350695x5)中有大量数据。 例如: z = [ 1.79 0.16 0.16 21.39 21.50 1.83 0.16 0.16 21.39 22.40 1.92 0.16 0.16 21.39 22.00 2.07 0.16 0.16 21.39 22.00 2.36 0.15 0.15 21.39 21.08 2.96 0.13 0.13

我在MATLAB(350695x5)中有大量数据。 例如:

z = [
1.79    0.16    0.16    21.39   21.50
1.83    0.16    0.16    21.39   22.40
1.92    0.16    0.16    21.39   22.00
2.07    0.16    0.16    21.39   22.00
2.36    0.15    0.15    21.39   21.08
2.96    0.13    0.13    21.39   21.04
3.21    0.13    0.13    21.39   23.00
3.72    0.12    0.12    21.39   24.00
3.87    0.11    0.11    21.39   21.39
4.14    0.10    0.10    21.39   22.00
4.14    0.10    0.10    21.39   21.50
4.16    0.10    0.10    21.39   21.39] 
我需要按以下方式对其进行排序: 基于1-2、2-3、3-4中的1列 并找到2,3,4列的范围(0-1,1-2,2-3,3-4)内的平均值

结果应该如下所示:

1   0.16    0.16    21.39   21.97
2   0.15    0.15    21.39   21.49
3   0.12    0.12    21.39   22.68
4   0.10    0.10    21.39   21.63
问题是我不能以正确的方式对它进行排序

解决方案的一部分可以用以下公式描述:

[ii jj] = ndgrid(z(:,1)+1,1:size(z,2)-1) %should sort first column from 0-1,1-2, 2-3, 3-4
z23 = z(:,2:end) 
out = [unique(z(:,1)),accumarray([ii(:),jj(:)],z23(:),[],@mean)], %find mean value

使用逻辑索引查找适用于特定范围的
z
中的值,例如:

i01 = (z >= 0) & (z < 1);  % Find logical indices
z01 = z(i01);  % Get values from 0 up to 1 (but not including 1)
i01=(z>=0)和(z<1);%查找逻辑索引
z01=z(i01);%获取从0到1的值(但不包括1)

然后,平均值的计算很容易:
mu_z01=平均值(z01)。当然,同样的方法也可以应用于1到2、2到3等其他范围。

使用逻辑索引查找适用于特定范围的
z
中的值,例如:

i01 = (z >= 0) & (z < 1);  % Find logical indices
z01 = z(i01);  % Get values from 0 up to 1 (but not including 1)
i01=(z>=0)和(z<1);%查找逻辑索引
z01=z(i01);%获取从0到1的值(但不包括1)
然后,平均值的计算很容易:
mu_z01=平均值(z01)。当然,同样的方法也可以应用于1到2、2到3等其他范围。

尝试以下方法:

idx = floor(z(:, 1));
sub = [idx z(:, 2:5)];
[xx, yy] = ndgrid(idx, 1:size(sub, 2));
out = accumarray([xx(:) yy(:)], sub(:), [], @mean)

out =

    1.0000    0.1600    0.1600   21.3900   21.9667
    2.0000    0.1467    0.1467   21.3900   21.3733
    3.0000    0.1200    0.1200   21.3900   22.7967
    4.0000    0.1000    0.1000   21.3900   21.6300
结果与你的不完全相符。我不确定我是否完全理解您的要求,但我编写的代码计算范围
1的平均值,请尝试以下方法:

idx = floor(z(:, 1));
sub = [idx z(:, 2:5)];
[xx, yy] = ndgrid(idx, 1:size(sub, 2));
out = accumarray([xx(:) yy(:)], sub(:), [], @mean)

out =

    1.0000    0.1600    0.1600   21.3900   21.9667
    2.0000    0.1467    0.1467   21.3900   21.3733
    3.0000    0.1200    0.1200   21.3900   22.7967
    4.0000    0.1000    0.1000   21.3900   21.6300

结果与你的不完全相符。我不确定我是否完全理解您想要什么,但是我编写的代码计算范围
1的平均值,那么您的问题是什么?你什么也没问。另外,请阅读,因为我们希望看到您在解决这个问题上做出一些努力,特别是您已经尝试过的代码。你的问题要包含一个。那么你的问题是什么?你什么也没问。另外,请阅读,因为我们希望看到您在解决这个问题上做出一些努力,特别是您已经尝试过的代码。你的问题必须包含一个。那么你要手动复制每个可能范围的代码?看起来好像要做很多工作。@Adriaan,当然不是。答案不应该总是完全回答问题,而是引导提问者朝着他们的目标前进。可以使用
for
循环对每个可能的范围进行编程。这个答案并不是这个问题的完整答案,但它回答了其中的一部分。所以你会手动复制每个可能范围的代码吗?看起来好像要做很多工作。@Adriaan,当然不是。答案不应该总是完全回答问题,而是引导提问者朝着他们的目标前进。可以使用
for
循环对每个可能的范围进行编程。这个答案绝不是对这个问题的完整回答,但它回答了其中的一部分。