如何计算.txt的平均向量。文件?

时间:2018-03-28 23:53:22

标签: matlab

我有一个基本的txt文件,内容如下:

0 0 0 40
0 0 1 40
0 1 0 40
0 1 1 40
1 15 15 250
1 15 16 250
1 16 15 250
1 16 15 250

列如下:

Class Truth Label
X
Y
Pixel Intensity

我正在尝试计算文件中每个类的平均向量。为此,我不确定我是否可以简单地执行

meanVector = mean(MyImage);

我不确定这是因为列不是所有像素密度 我怀疑我将有两个平均向量,0级和1级。

testFile = fopen('test_file.txt', 'r');
sizeOfTestFile = [4 Inf];
testFileMatrix = fscanf(testFile, '%d', sizeOfTestFile);
testFileMatrix = testFileMatrix’

在上面的代码中,我正在为'test_file.txt'生成FileID,并通过扫描原始文件创建一个8 x 4矩阵。

因此,我需要将这个新创建的Matrix拆分为两个,这样我有一个4 x 4,其中所有行的Class为0,另一个4 x 4,其中所有行的Class都是1?< / p>

然后我会选择像素密度列的方法吗?

很抱歉这个问题,我主要是试图理解问题本身,而不一定要在语法上挣扎。

1 个答案:

答案 0 :(得分:5)

最好的办法是使用accumarray,因为这自然会将数字放入同一组。例如,我们将像素密度的前四个值放入组0,将接下来的四个值放入组1.然后对属于每个组的值应用一些操作。在这种情况下,您想要应用均值。

唯一的复杂性是MATLAB开始索引为1,因此您需要偏移文本文件的第一列,组号为1。

因此,这段代码非常简单:

% Your code
testFile = fopen('test_file.txt', 'r');
sizeOfTestFile = [4 Inf];
testFileMatrix = fscanf(testFile, '%d', sizeOfTestFile);
testFileMatrix = testFileMatrix';

% Calculate the average of each group
means = accumarray(testFileMatrix(:, 1) + 1, testFileMatrix(:, 4), [], @mean);

我们得到:

>> means

means =

    40
   250

显然,每组的平均值分别为40和250,因为每组只有40和250.

如果您与accumarray混淆,您可以做的一件事就是查看所有唯一的组值,循环显示它们并找出属于该组的像素密度并找到平均值。

这样的事情会起作用:

means = [];
for i = 1 : max(testFileMatrix(:, 1)) + 1
    means(end + 1) = mean(testFileMatrix(testFileMatrix(:, 1) + 1 == i, 4));
end

这将迭代地将每个组的平均值添加到means向量,直到您到达所有组。这当然是一个较慢的选择,但如果你对accumarray感到不舒服,它会以更直观的方式做你想做的事。

相关问题