![](/img/trans.png)
[英]i have a matrix of 18*9, I want to calculate the mean values of 6 rows each and get a resultant matrix of 3*9
[英]Get correct values of mean of matrix rows
我剛剛開始使用Octave的旅程-我有大量的數據文件需要處理。
我在Cygwin64和3.8.2-3上使用的是3.8.2版本的Octave,適用於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
我感興趣的是數據,即float矩陣,包含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
這些是前兩行的平均值。 這是不正確的(我已將第一行的數據手動復制到Excel並進行了檢查)。
中位數會打印類似的錯誤值。
有趣的是,當我不使用>> format長代碼時,Octave顯示正確的值(帶點和科學的“ e”),但均值的結果仍然是錯誤的。
此矩陣中沒有空的“單元格”
我無法在互聯網上找到答案(主要是因為我不知道該問什么問題)
你能告訴我我在做什么錯嗎? 我應該輸入什么才能得到想要的結果?
預先感謝您對我們的支持。
編輯:我已經添加了我正在使用的所有代碼行(實際上沒有太多編碼)。 數據是真實數據(只是縮短了,因為我不想發布1360160列)
EDIT2:這是指向我的文件之一的鏈接。 http://we.tl/mL6agFvssQ我選擇了上面顯示的數據文件,並將其放在WeTransfer上。 也許還有另一件事我只是不知道。
我不理解您為什么說“這不是正確的數據(點和科學符號都消失了-這些是相同的數字,但不是相同的數據”)。
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)”創建隨機數據,輸出也可以。 您確實應該考慮創建一個可以運行的測試用例,或者將數據上傳到您的網站空間並在此處添加鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.