我刚刚开始使用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上。也许还有一件我不知道的事情。
答案 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)"创建随机数据。输出没问题。您真的应该考虑创建一个可以运行的测试用例,或者将数据上传到您的网站空间并在此处添加链接。