Matlab 向量元素范围的平均值
我在MATLAB(350695x5)中有大量数据。 例如: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
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
循环对每个可能的范围进行编程。这个答案绝不是对这个问题的完整回答,但它回答了其中的一部分。