2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 19:59 
Заблокирован


08/02/14

53
data = Import["d:\quotes\data.csv", "CSV", "HeaderLines" -> 1] - импорт из csv файла

Coordinate = data[[All, 6]] - создание таблицы с данными из 6 столбца

L = Length[Coordinate] - количество значений в столбце

Теперь необходимо посчитать разницу между значениями в столбце Coordinate. Ниже строка на которой появляется ошибка:

For[i = 1, i < L, i++, Speed = Coordinate[i + 1] - Coordinate[i]]

General::stream: 1 is not a string, InputStream[ ], or OutputStream[ ]. >>

В чем ошибка ? Как поправить код что-бы считалось ?

Спасибо.

 Профиль  
                  
 
 Posted automatically
Сообщение20.03.2014, 20:09 
Админ форума
Аватара пользователя


19/03/10
8952
 i  Тема перемещена из форума «Математика (общие вопросы)» в форум «Околонаучный софт»

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:07 


08/03/11
186
Без вашего файла непонятно. У вас после Import числа в листе?
В любом случае, не используйте For, попробуйте лучше по аналогии:
Код:
data = Range[1, 100];
data - Join[{0}, Most[data]]

Или если вам просто нужна производная:
Код:
data = (Interpolation@Range[100])';
Plot[data[s], {s, 1, 100}]

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:24 
Заблокирован


08/02/14

53
Цитата:
У вас после Import числа в листе?


Да, вот такие {{20100111, 100000, 86.56, 87.4, 85.51, 87.12, 25222076}, {20100111,
110000, 87.12, 87.49, 86.71, 86.91, 20186513}, {20100111, 120000,
86.94, 87.49, 86.83, 87.43, 10911334}, {20100111, 130000, 87.39,
88.17, 87.36, 87.76, 27582974}, {20100111, 140000, 87.76, 87.8,
87.13, 87.18, 14383949}...

Ваш код не понял, чесно говоря. Задача - посчитать скорость, есть координаты, но для скорости нужна в т.ч. разность координат, сложность с вычислением которой и возникла.

Просьба подсказать код для нахождения разности между числами из 6го столбца выделенных жирным шрифтом.

Данные после:

Coordinate = data[[All, 6]]

{87.12, 86.91, 87.43, 87.76, 87.18, 87.5, 87.89, 87.55, 86.69, 85.61,
85.53, 86.43, 86.58, 86.15, 85.85...

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:43 
Заслуженный участник


27/04/09
28128
А какая версия? В шестой появилась функция Differences — просто передаёте ей список, и получаете список первых разностей. А если вторым аргументом указать натуральное число $n$, получится список $n$-х разностей.

В четвёртой версии появилась функция ListConvolve свёртки списков. ListConvolve[{1, -1}, список] тоже даст разности.

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:48 


08/03/11
186
Ладно, разберемся с вашим кодом. Вы 1) не правильно вызываете элементы Coordinate[i + 1], нужно Coordinate[[i + 1]], 2) Speed у вас просто число, а должен быть лист, 3) в For у вас вызов элемента i+1, которого нет. Делайте по этому примеру:
Код:
Speed = Coordinate = data[[All, 6]];
L = Length@Coordinate;
Do[Speed[[i]] = Coordinate[[i + 1]] - Coordinate[[i]], {i, 1, L - 1}]
Speed


(Оффтоп)

arseniiv в сообщении #839062 писал(а):
А какая версия? В шестой появилась функция Differences — просто передаёте ей список, и получаете список первых разностей. А если вторым аргументом указать натуральное число $n$, получится список $n$-х разностей.

В четвёртой версии появилась функция ListConvolve свёртки списков. ListConvolve[{1, -1}, список] тоже даст разности.

Отличный вариант :)

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 22:09 
Заблокирован


08/02/14

53
Спасибо, все посчиталось ! :D

Если позволите, еще два вопроса.

Я пытаюсь построить график для Speed и возникает два вопроса:

Есть ли функция которой можно построить график для переменной Speed не задавая интервал значений кроме ListLinePlot[{Speed}] ? Поскольку когда я пытаюсь указать интервал значений для Plot вот так {i, 1, L - 1}, то получаю график чисел от 1 до L - 1, а не график данных.

Второй вопрос, как указать что-бы в график вмещались все данные (ListLinePlot[{Speed}]), а не было вот такого когда "верха обрезаны":

Изображение

Еще раз спасибо всем !

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 23:37 
Заслуженный участник


27/04/09
28128
arbitrageur в сообщении #839072 писал(а):
Второй вопрос, как указать что-бы в график вмещались все данные (ListLinePlot[{Speed}]), а не было вот такого когда "верха обрезаны":
Припишите последним аргументом PlotRange -> All.

arbitrageur в сообщении #839072 писал(а):
Поскольку когда я пытаюсь указать интервал значений для Plot вот так {i, 1, L - 1}, то получаю график чисел от 1 до L - 1, а не график данных.
Каким кодом?

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение21.03.2014, 00:46 
Заблокирован


08/02/14

53
Цитата:
Припишите последним аргументом PlotRange -> All.


Спасибо, помогло.

Цитата:
Каким кодом?


Этим:

Plot[Speed[[i]], {i, 1, L}]

Но теперь на графике ничего совсем не отображается кроме осей. Не могу понять как Speed не являющийся функцией для которой задавался-бы диапазон аргумента, отобразить с помощью Plot т.к. Plot обязательно требует диапазон для аргумента. Извиняюсь за тавтологию.

Еще раз спасибо всем.

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение21.03.2014, 09:35 


08/03/11
186
Plot используется для функций. У вас Speed -- лист/вектор, его можно построить командой:
Код:
ListPlot[Speed]

Если вам нужна именно функция Speed, то используйте интерполяцию:
Код:
SpeedF = Interpolation[Speed];
Plot[SpeedF[x], {x, 1, Length[Speed]}]

 Профиль  
                  
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение21.03.2014, 10:34 
Заблокирован


08/02/14

53
Всем еще раз спасибо. Все коды работают.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group