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

Jet*_*s08 3 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
Run Code Online (Sandbox Code Playgroud)

专栏如下:

Class Truth Label
X
Y
Pixel Intensity
Run Code Online (Sandbox Code Playgroud)

我试图计算文件中每个类的平均向量.为此,我不确定我是否可以简单地做到

meanVector = mean(MyImage);
Run Code Online (Sandbox Code Playgroud)

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

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

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

所以有了这个,我需要将这个新创建的Matrix拆分成两个,这样我有一个4 x 4,其中所有行的Class都是0,而另一个4 x 4,其中所有行的Class都是1?

然后我会做像素密度列的手段?

对不起,我主要是试图理解问题本身,而不一定是在语法上挣扎.

ray*_*ica 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);
Run Code Online (Sandbox Code Playgroud)

我们得到:

>> means

means =

    40
   250
Run Code Online (Sandbox Code Playgroud)

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

如果您感到困惑accumarray,您可以做的一件事就是查看所有唯一的组值,遍历它们并隔离出属于该组的像素密度并找到平均值.

像这样的东西会起作用:

means = [];
for i = 1 : max(testFileMatrix(:, 1)) + 1
    means(end + 1) = mean(testFileMatrix(testFileMatrix(:, 1) + 1 == i, 4));
end
Run Code Online (Sandbox Code Playgroud)

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