获取矩阵行平均值的正确值

时间:2014-10-21 20:55:51

标签: matrix octave mean

我刚刚开始使用Octave的旅程 - 我收到了一个我必须处理的大量数据文件。

我在Cygwin64上使用3.8.2版本的Octave和3.8.2-3用于Windows的非官方GNU Octave版本 - 我的问题出现在两者上,所以我认为这是我的错误而不是错误。

由于我对这个程序不太满意,我的数据出现了问题。

所以,这就是它的样子。

我的数据的每个文件都包含一个名为datastr的结构。

这是在

之后打印的内容
 >> whos
 Variables in the current scope:

   Attr Name         Size                  Bytes  Class
   ==== ====         ====                  =====  =====
        datastr      1x1                   38084576  struct

Total is 1 element using 38084576 bytes

在打印结构中的字段后,我得到了这个:

 >>struct_levels_to_print(0)
 >>datastr

 scalar structure containing the fields:

t0: 1x1 scalar
chanCount: 1x1 scalar
chanLabels: 1x7 cell
fs: 1x1 scalar
calibr: 1x7 matrix
data: 7x1360160 float matrix

我感兴趣的是数据,浮点矩阵,包含7行,每行有1360160列。

这是两个第一行的外观(仅发布了七列,之后我退出)

>>struct_levels_to_print(1)
>>datastr

Columns 1 through 7:
3.9899e+004  4.3311e+004  4.6618e+004  4.6773e+004  4.2841e+004  4.0228e+004  3.5909e+004
2.8070e+004  2.2204e+004  1.5375e+004  9.6730e+003  -8.2862e+004  -7.9456e+004 -7.6144e+004

我从结构中提取了矩阵并将其添加到变量中:

 >> MyData = datastr.data

MyData变量是单个类

>> whos
Variables in the current scope:

Attr Name         Size                     Bytes  Class
==== ====         ====                     =====  =====
     MyData       7x1360160             38084480  single
     datastr      1x1                   38084576  struct

然后我将格式更改为long(是的,我尝试过不改变格式,最终结果是一样的)

>> format long
>> MyData

这是移动后的前两行(MyData仍为单行):

39899  43311  46618  46773  42841  40228  35909
28070  22204  15375  96730  -82862  -79456 -76144

这不是正确的数据(点和科学符号消失了) - 那些是相同的数字,但不是相同的数据。我认为这是问题,但还有更多。

我想要做的是分别获得每一行的意思。这意味着,最后,我应该有7个单独的方法,每个方法用于一行数据。

我在网上搜索并得到了这个:我应该输入

>> M1 = mean(MyData,2)

这应该是我浮点矩阵中每一行的意思。

然而,结果并不像我追求的那样:

M1 =

-91349216
-91482784

这些是第2行的平均值。这是不正确的(我已手动将第一行的数据复制到Excel并检查它。)

中位数打印出类似的错误值。

有趣的是,当我不使用>>格式长代码时,Octave会显示正确的值(带点和科学'e'),但的结果意味着仍然是错误的。

此矩阵中没有空的“单元格”

我无法在互联网上找到答案(主要是因为我不知道应该问什么问题)

你能告诉我我做错了什么吗?我应该输入什么,以获得我想要的结果?

提前感谢您的支持。

编辑:我添加了我正在使用的所有代码行(实际编码不多)。 数据是真实数据(仅缩短,因为我不想发布1360160列)

EDIT2: 这是我的一个文件的链接。 http://we.tl/mL6agFvssQ我选择了带有上述数据的文件并将其放在WeTransfer上。也许还有一件我不知道的事情。

1 个答案:

答案 0 :(得分:0)

我不明白为什么你说"这不是正确的数据(点和科学记数都消失了) - 那些是相同的数字,但不是相同的数据。&#34 ;

3.9899e+004  4.3311e+004  4.6618e+004  4.6773e+004  4.2841e+004  4.0228e+004  3.5909e+004
2.8070e+004  2.2204e+004  1.5375e+004  9.6730e+003  -8.2862e+004  -7.9456e+004 -7.6144e+004

39899  43311  46618  46773  42841  40228  35909
28070  22204  15375  96730  -82862  -79456 -76144

是相同的数据,只是另一种显示格式。您可以使用

强制执行上述格式
format short e

我根据您的问题创建了一个测试用例:

tmp = [39899  43311  46618  46773  42841  40228  35909;
    28070  22204  15375  96730  -82862  -79456 -76144];
datastr = struct ("data", single(tmp), "t0", 1.23);
struct_levels_to_print(0)
datastr
MyData = datastr.data
M1 = mean(MyData, 2)

输出:

datastr =
  scalar structure containing the fields:
    data: 2x7 float matrix
    t0: 1x1 scalar
MyData =
   39899   43311   46618   46773   42841   40228   35909
   28070   22204   15375   96730  -82862  -79456  -76144

M1 =
   4.2226e+04
  -1.0869e+04

没关系。即使我使用" rand(7,1360160)"创建随机数据。输出没问题。您真的应该考虑创建一个可以运行的测试用例,或者将数据上传到您的网站空间并在此处添加链接。