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

Matrix 获取矩阵行平均值的正确值,matrix,octave,mean,Matrix,Octave,Mean,我刚刚开始我的八度音程之旅-我有一个巨大的数据文件,我必须处理 我在Cygwin64和3.8.2-3非官方GNU Octave Windows版本上使用了Octave的3.8.2版本-我的问题出现在这两个版本上,所以我认为这是我的错误,而不是错误 因为我不太擅长这个程序,所以我的数据有问题 这就是它的样子 我的数据的每个文件都包含一个名为datastr的结构 这是它打印出来的 >> whos Variables in the current scope: Attr Nam

我刚刚开始我的八度音程之旅-我有一个巨大的数据文件,我必须处理

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

因为我不太擅长这个程序,所以我的数据有问题

这就是它的样子

我的数据的每个文件都包含一个名为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仍然是single:

39899  43311  46618  46773  42841  40228  35909
28070  22204  15375  96730  -82862  -79456 -76144
这不是正确的数据——点和科学符号都不见了——它们是相同的数字,但不是相同的数据。我认为这就是问题所在,但是还有更多的问题

我想做的是,分别得到每一行的平均值。这意味着,最后,我应该有7个独立的方法,每个方法对应一行数据

我在网上搜索了一下,得到了这样的信息:我应该打字

>> M1 = mean(MyData,2)
这应该可以得到浮点矩阵中每一行的平均值

然而,结果并不是我想要的:

M1 =

-91349216
-91482784
这些是前两行的平均值。不正确,我已将第一行的数据手动复制到Excel并进行了检查

中值打印相似的、错误的值

有趣的是,当我不使用>>格式的长代码时,倍频程用点和科学的“e”显示正确的值,但平均值的结果仍然是错误的

此矩阵中没有空单元格

我在网上找不到答案,主要是因为我不知道该问什么问题

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

提前感谢您的支持

编辑:我已经添加了所有的代码行,没有太多的编码,真的我正在使用。 数据是真实数据,只是缩短了,因为我不想发布1360160列

编辑2:
这是我的一个文件的链接。我选择了上面显示的数据文件,并将其放在WetTransfer上。也许还有一件事我还不知道。

我不明白你为什么说这是不正确的数据点和科学符号不见了-这些是相同的数字,但不是相同的数据

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

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

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

没关系。即使我用Rand71360160创建随机数据,输出也没有问题。你真的应该考虑创建一个测试用例,它可以运行或上传数据到你的WebStudio并在这里添加一个链接。

你真的应该添加你的源代码,MyDATA变量是如何单类的,并尝试创建一些人工数据,你可以在这里包含并显示问题。我想你是在把数据转换成整数。好的,谢谢。我将创建一些类似于原始的数据,我将发布代码,结果等。好的,我已经编辑了所有的代码行。现在,它一步一步地展示了我如何处理这些数据。我并没有做更多的事情,因为我认为获得矩阵中这些行的平均值将非常简单,即使对于初学者也是如此。我错了…好的,谢谢你的简短e格式。我现在觉得自己很愚蠢。好吧,我已经记下了你的答案,因为它确实让我度过了难关。似乎文件数据真的有点问题,可能是收集方式不对,或者保存得不好,这有助于我发现,让我失望的不是八度。再次感谢你!
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