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