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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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,我有一个问题要解决 我有一个相当大的数组,在第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.5000000000000

我有一个问题要解决

我有一个相当大的数组,在第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循环,但不确定如何根据第1列中的一组行对第2列中的一组行执行a进程。有人有什么想法吗?很抱歉,我还没有任何示例代码,我真的不知道现在该怎么做

我会这样做:

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));

我会这样做:

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));

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

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

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

[~, ii, jj] = unique(value_sort,'legacy');
变量
result
在其第1列中包含
x
第1列的整数部分,在其第2列中包含
x
第2列的相应平均值。使用您的示例数据:

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

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

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

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

[~, ii, jj] = unique(value_sort,'legacy');
变量
result
在其第1列中包含
x
第1列的整数部分,在其第2列中包含
x
第2列的相应平均值。使用您的示例数据:

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

这个问题我不太清楚。您能提供您的样本输入所需的输出吗<代码>我想做的是为第1列中的每个整数编写平均第2列的0和1的代码??第1列有浮点,如何求平均值?您说“对于第1列中的每个整数”,但第1列不包含整数。你是说整数部分吗?或者你们的意思是“第1列中的每个数字”?这个问题我不太清楚。您能提供您的样本输入所需的输出吗<代码>我想做的是为第1列中的每个整数编写平均第2列的0和1的代码??第1列有浮点,如何求平均值?您说“对于第1列中的每个整数”,但第1列不包含整数。你是说整数部分吗?或者你的意思是“对于第1列中的每个数字”?有意义,但是发布的矩阵没有意义,因为第1列中的所有值都是唯一的…OP说他想对第1列中的每个整数进行平均,这就是为什么我包含
floor
语句来向下舍入所有值。我明白了。我本不想发言,但这样说是有道理的+1根据我的统计,至少有三种方法可以解读这个问题。我已经为另外两个添加了答案。有意义,但发布的矩阵没有意义,因为第1列中的所有值都是唯一的…OP说他想对第1列中的每个整数求平均值,这就是为什么我包含
floor
语句来向下舍入所有值。我明白了。我本不想发言,但这样说是有道理的+1根据我的统计,至少有三种方法可以解读这个问题。我为另外两个问题添加了答案。