0

我有一个关于我要解决的问题的问题。

我有一个相当大的数组,第 1 列中有一系列数字,范围从 4、4.2、4.4 和 16、16.5、16.7 等,第 2 列中有一系列 0 和 1,对应于每个数字,因此第 1 列将是说 5 和第 2 列将说 0。下面是我正在使用的矩阵的一个非常小的版本:

[5,0;5.10000000000000,0;5.20000000000000,0;5.25000000000000,0;5.30000000000000,0;5.35000000000000,0;5.45000000000000,0;5.50000000000000,0;5.55000000000000,0;5.60000000000000,0;14.2000000000000,0;5.70000000000000,0;5.80000000000000,0;5.90000000000000,0;14.0000000000000,0;14.9500000000000,1;14.8500000000000,1;14.6000000000000,1;14.3500000000000,1;14.3000000000000,1;14.2500000000000,1;14.3500000000000,1;14.2500000000000,1;14.1500000000000,1;14.0500000000000,1;]

我想做的是为第 1 列中的每个整数编写平均第 2 列的 0 和 1 的代码。老实说,我不知道从哪里开始,我开始编写一个 for 循环,但不确定我将如何执行 aa在第 1 列中的一组行的基础上处理第 2 列中的一组行。有人有什么想法吗?抱歉,我还没有任何示例代码,老实说,我现在不知道该怎么做。

4

2 回答 2

2

我会做这样的事情:

integers = floor(inputMatrix(:,1));
uniqueIntegers = unique(integers);
K = numel(uniqueIntegers);

outputMean = nan(1,K);
for k = 1:K
    outputMean(k) = mean(inputMatrix(integers==uniqueIntegers(k),2)));
end

其中 inputMatrix 是上面的矩阵。用简单的英语,使用函数将第一列转换为整数floor,挑选出唯一值,然后遍历唯一值并使用逻辑索引找到平均值。这两个向量uniqueIntegers分别outputMean包含那些整数和第二列的平均值。

正如评论中所建议的,我认为有几种方法可以阅读这个问题。首先,如上所述,OP 希望将小数点左侧 5 的所有内容平均在一起。

但是,如果 OP 只想对那些包含 5(或其他整数)的值进行平均,则将循环中的值替换为:

outputMean(k) = mean(inputMatrix(inputMatrix(:,1)==uniqueIntegers(k),2)));

但是,如果 OP 想要将所有包含整数的值平均在一起,而不管该值是什么,那么整个代码块可以简化为:

integers = floor(inputMatrix(:,1)) == inputMatrix(:,1);
outputMean = mean(inputMatrix(integers,2));
于 2013-10-17T19:44:47.280 回答
2

如果我理解正确,您需要第二列中第一列中具有相同整数部分的所有值的平均值。

您可以通过对上一个问题的答案稍作修改来实现这一点。让x成为您的数据(2 列,任意行数)。然后:

x1_int = floor(x(:,1));
[value_sort ind_sort] = sort(x1_int);
[~, ii, jj] = unique(value_sort);
n = diff([0; ii]);
result = [ x1_int(ii) accumarray(jj,x(ind_sort,2))./n ];

如果您使用 Matlab 2013a 或更高版本,请将第三行替换为以下内容。这是必要的,因为该unique函数已在 Matlab 2013a 中更改:

[~, ii, jj] = unique(value_sort,'legacy');

该变量result在其第 1 列中包含 的第 1 列的整数部分,x在其第 2 列中包含 的第 2 列的相应平均值x。使用您的示例数据:

x= [5.0000         0
    5.1000         0
    5.2000         0
    5.2500         0
    5.3000         0
    5.3500         0
    5.4500         0
    5.5000         0
    5.5500         0
    5.6000         0
   14.2000         0
    5.7000         0
    5.8000         0
    5.9000         0
   14.0000         0
   14.9500    1.0000
   14.8500    1.0000
   14.6000    1.0000
   14.3500    1.0000
   14.3000    1.0000
   14.2500    1.0000
   14.3500    1.0000
   14.2500    1.0000
   14.1500    1.0000
   14.0500    1.0000]

结果是

result =

    5.0000         0
   14.0000    0.8333
于 2013-10-17T22:51:49.343 回答