2014 dxdy logo

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

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




 
 Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 19:59 
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 
Аватара пользователя
 i  Тема перемещена из форума «Математика (общие вопросы)» в форум «Околонаучный софт»

 
 
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:07 
Без вашего файла непонятно. У вас после 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 
Цитата:
У вас после 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 
А какая версия? В шестой появилась функция Differences — просто передаёте ей список, и получаете список первых разностей. А если вторым аргументом указать натуральное число $n$, получится список $n$-х разностей.

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

 
 
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 21:48 
Ладно, разберемся с вашим кодом. Вы 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 
Спасибо, все посчиталось ! :D

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

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

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

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

Изображение

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

 
 
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение20.03.2014, 23:37 
arbitrageur в сообщении #839072 писал(а):
Второй вопрос, как указать что-бы в график вмещались все данные (ListLinePlot[{Speed}]), а не было вот такого когда "верха обрезаны":
Припишите последним аргументом PlotRange -> All.

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

 
 
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение21.03.2014, 00:46 
Цитата:
Припишите последним аргументом PlotRange -> All.


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

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


Этим:

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

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

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

 
 
 
 Re: Mathematica, вопрос по коду для работы с данными.
Сообщение21.03.2014, 09:35 
Plot используется для функций. У вас Speed -- лист/вектор, его можно построить командой:
Код:
ListPlot[Speed]

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

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

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group