簡體   English   中英

獲取正確的矩陣行平均值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM