2014-10-21 3 views
0

Я только что начал свое путешествие с Octave - у меня есть огромные файлы данных, с которыми мне приходится иметь дело.Получить правильные значения средних строк матрицы

Я использую версию Octav на 3.8.2 для Cygwin64 и 3.8.2-3. Неофициальный GNU Octave для Windows - моя проблема появляется на обоих, поэтому я предполагаю, что это моя ошибка, а не ошибка.

Поскольку я не очень хорошо разбираюсь в этой программе, у меня возникла проблема с моими данными.

Так вот, как это выглядит.

Каждый файл моих данных содержит структуру, называемую 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 

Затем я меняю формат на длинный (и да, у меня есть tr IED НЕ изменяя формат, конечный результат будет тот же)

>> 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 и проверил ее).

Медиана печатает аналогичные, неправильные значения.

Самое смешное, что когда я не использую >> длинного формата кода, Октав показывает правильные значения (с точками и научными «е»), но результат значит все еще не так.

Там нет пустых «клетки» в этой матрице

Я не был в состоянии найти ответ в интернете (в основном потому, что я не знаю, какой вопрос я должен спросить)

Может вам скажи мне, что я делаю неправильно? Что мне следует вводить, чтобы получить результат, который я ищу?

Заранее благодарю вас за поддержку.

EDIT: Я добавил все строки кода (не очень кодирования, действительно), которые я использую. Данные настоящие данные (только сокращенные, так как я не хочу размещать столбцы 1360160)

EDIT2: Вот ссылка на один из моих файлов. http://we.tl/mL6agFvssQ Я выбрал файл с данными, представленными выше, и положил его на WeTransfer. Возможно, есть еще одна вещь, которую я просто не знаю.

+0

Вы действительно должны добавить свой исходный код (как вы «переменная MyData - это один класс») и попытаться создать некоторые искусственные данные, которые вы можете включить здесь, и показать проблему. Думаю, вы в какой-то момент преобразуете свои данные в целые числа. – Andy

+0

Хорошо, спасибо. Я создам некоторые данные, похожие на оригинальные, и буду отправлять коды, результаты и т. Д. – Karsch

+0

Хорошо, я отредактировал все коды. Теперь он показывает шаг за шагом, что я делаю с этими данными. Я больше ничего не делаю, так как я не могу понять, что эти строки в матрице будут настолько простыми, даже для начинающих. Как я ошибался ... – Karsch

ответ

0

Я не понимаю, почему вы говорите: «Это неверные данные (точки и научная нотация исчезли) - это те же цифры, но не одни и те же данные».

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 

Я создал TestCase из вашего вопроса:

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)», выход будет в порядке. Вы действительно должны подумать о создании тестового сценария, который может быть запущен или загружен вами на ваше веб-пространство, и добавьте ссылку здесь.

+0

Хорошо, спасибо за формат Short e. Сейчас я чувствую себя глупо. – Karsch

+0

Хорошо, я отметил ваш ответ, так как он действительно прошел через него. Кажется, что что-то действительно не так с файловыми данными (вероятно, оно было собрано неверно или плохо списано). В любом случае, это помогло увидеть, что это не то, что Октав меня не подвел. Еще раз спасибо! – Karsch