, Какие языки/среды Вы использовали для разработки научного программного обеспечения, особенно анализ данных? Какие библиотеки? (Например, что Вы используете для графического изображения?)
я раньше работал на Enthought, основной корпоративный спонсор SciPy. Мы сотрудничали с учеными из компаний, которые сократили Enthought на разработку заказного программного обеспечения. Python/SciPy, казалось, был комфортными условиями для ученых. Это намного менее пугающе для начала работы с тем, чем говорят C++ или Java, если Вы - ученый без фона программного обеспечения.
Распределение Enthought Python идет со всеми библиотеками научных вычислений включая анализ, графическое изображение, 3D visualation, и т.д.
Был там каким-либо обучением людям без каких-либо значительных знаний в программировании?
Enthought действительно предлагает , обучение SciPy и сообщество SciPy довольно хорошо об ответе на вопросы в списках рассылки.
у Вас было что-нибудь как управление версиями, отслеживание ошибок?
Да, и да (Subversion и Trac). Так как мы работали совместно с учеными (и обычно удаленно от них), управление версиями и отслеживание ошибок были важны. Потребовалась некоторая тренировка, чтобы заставить некоторых ученых усваивать преимущества управления версиями.
, Как был бы Вы идти о попытке создать достойную среду для программирования, не попадая слишком много путем индивидуальных ученых (особенно физики являются упрямыми людьми!)
Удостоверяются, что они ознакомлены с набором инструментальных средств. Это берет инвестиции впереди, но это заставит их чувствовать себя менее наклоненными для отклонения его в пользу чего-то более знакомого (Excel). Когда инструменты приведут их к сбою (и они будут), удостовериться, что у них есть место для движения для справки — списки рассылки, группы пользователей, другие ученые и разработчики программного обеспечения в организации. Чем больше справки там должно вернуть их к выполнению физики, тем лучше.
Я не эксперт в этой области, но я всегда понимал, что это - то, для чего был создан MATLAB. Существует способ интегрировать MATLAB с SVN для управления исходным кодом также.
В первую очередь, я определенно пошел бы с языком сценариев, чтобы избежать необходимости объяснять много дополнительных вещей (например, ручное управление памятью - главным образом - хорошо, если Вы пишете низкий уровень, производительность чувствительный материал, но для кого-то, кто просто хочет использовать компьютер в качестве обновленного научного калькулятора, это - определенно излишество). Кроме того, озирайтесь, если существует что-то специфичное для Вашего домена (как R для статистики). Это имеет преимущество уже работы с понятиями, с которыми пользователи знакомы и специализировавший код для определенных ситуаций (например, вычисление стандартных отклонений, применение статистических тестов, и т.д. в случае R).
, Если бы Вы хотите использовать более универсальный язык сценариев, я пошел бы с Python. Две вещи это имеет движение для него:
Как добавленное преимущество, это имеет библиотеки для большинства вещей, которые Вы хотели бы сделать с ним.
Для управления исходным кодом, централизованные системы такой как Подрывная деятельность выше к научному использованию из-за ясной единственной точки истины (SPOT). Журналирование изменений и способности вспомнить версии любого файла, без наличия упорно ищет, где найти что-то, имеет огромные преимущества ведения записей. Инструменты как Мерзавец и Монотонность : о, боже хаос, я могу вообразить это, следовал бы! Наличие ясных записей, какая версия сценариев задания взлома использовалась, в то время как играющий с новым датчиком, когда, мимо которого прошел бозон Higgs или та сверхновая звезда аварийно завершился, приведет к счастью.
Определенно, используйте Подрывная деятельность для держания в курсе, происходящие работой, и стабильные копии моментального снимка исходного кода. Это включает C++, Java и т.д. для программных инструментов собственной разработки и беглых сценариев для одноразовой обработки.
С сильной склонностью в науке и примененной разработке к "одинокому ковбою" методология разработки, обычная практика организации репозитория в соединительную линию, тег и независимо от того, что это было - не беспокоится! Ученым и их техническому персоналу лаборатории нравится вращать кнопки, электроды покачивания и вакуумные утечки преследования. Это - действительно задание, чтобы заставить всех соглашаться на, говорить Python / NumPy или следовать некоторому соглашению о присвоении имен; забудьте пытаться заставить их применить тайные методы разработчика программного обеспечения и соглашения.
, Какие языки/среды Вы использовали для разработки научного программного обеспечения, особенно анализ данных? Какие библиотеки? (Например, что Вы используете для графического изображения?)
Мой студенческий физический факультет преподавал классы LabVIEW и использовал его экстенсивно в его научно-исследовательских работах.
другая альтернатива MATLAB, в котором у меня нет опыта. Существуют лагеря для любого продукта; у каждого есть его собственные преимущества/недостатки. В зависимости от каких проблем необходимо решить, один пакет может быть более предпочтительным, чем другой.
Относительно анализа данных, можно использовать любой вид цифродробилки, которую Вы хотите. Идеально, можно сделать трудные вычисления на языке X и отформатировать вывод для графического изображения приятно в Excel, Mathcad, Mathematica, или независимо от того, что разновидность du подмастерье, выводящее систему на печать. Не ожидайте стандартизацию здесь.
у Вас было что-нибудь как управление версиями, отслеживание ошибок?
Оглядывание назад, которое мы не сделали, и для нас всех будет легче, если мы сделали. Ничто как повреждение всего и попытка в течение многих часов зафиксировать его!
Определенно управление исходным кодом использования для любого общего кода. Поощрите людей писать свой код способом, который мог быть сделан более универсальным. Это действительно просто кодирует лучшие практики. Действительно, у Вас должны быть они обучение (или взятие) класс информатики, таким образом, они могут получить основы.
, Как был бы Вы идти о попытке создать достойную среду для программирования, не попадая слишком много путем индивидуальных ученых (особенно физики являются упрямыми людьми!)
существует ясное разделение между данными aquisition (DAQ) и анализом данных. Значение, возможно стандартизировать на DAQ и затем позволить ученым играть с данными в программе их выбора.
, Какие языки/среды Вы использовали для разработки научного программного обеспечения, особенно анализ данных? Какие библиотеки? (Например, что Вы используете для графического изображения?)
Python, NumPy и pylab (графическое изображение).
Было там какое-либо обучение людям без каких-либо значительных знаний в программировании?
нет, но я работал в мультимедийной научно-исследовательской лаборатории, поэтому почти у всех был фон информатики.
у Вас было что-нибудь как управление версиями, отслеживание ошибок?
Да, Подрывная деятельность для управления версиями, Trac для трассировки ошибки и Wiki. Можно получить бесплатный хостинг средства отслеживания/управления версиями ошибки от http://www.assembla.com/ если их ТОСЕС соответствия проект.
, Как был бы Вы идти о попытке создать достойную среду для программирования, не попадая слишком много путем индивидуальных ученых (особенно физики являются упрямыми людьми!).
Удостоверяются, что инфраструктура настраивается и хорошо сохраняется и попытка продать преимущества управления исходным кодом.
Я - статистик в университете в Великобритании. Обычно люди здесь используют R для анализа данных, довольно легко учиться, знаете ли Вы C/Perl. Его действительная мощность находится в способе, которым можно импортировать и изменить данные в интерактивном режиме. Очень легко взять, много говорят CSV (или Excel) файлы и объединяют их, создают новые столбцы на основе других и затем бросают это в GLM, НОЖКУ или некоторую другую модель. Графическое изображение тривиально также и не требует знания совершенно нового языка (как PGPLOT или GNUPLOT.), Конечно, Вы также имеете преимущество наличия набора встроенных функций (от простых вещей как среднее, стандартное отклонение и т.д. полностью к нейронным сетям, шлицам и графическому изображению GL.)
сказавший это, существует несколько проблем. С очень большими наборами данных R может стать очень медленным (я только действительно видел это с> 50,000x30 наборы данных), и так как он интерпретировал Вас, не получают преимущество Fortran/C в этом отношении. Но, Вы можете (очень легко), заставляют R называть C, и Фортран совместно использовал библиотеки (или от чего-то как netlib или от, которые Вы записали сами.) Так, обычный рабочий процесс был бы к:
, Который работает очень хорошо на меня.
я - один из единственных людей в моем отделе (> 100 человек) использующий управление версиями (в моем случае с помощью мерзавца с githuib.com.) Это скорее вызывает беспокойство, но они просто, кажется, не увлечены испытанием его и довольны раздаванием zip-файлов (фу).
Мое предложение должно было бы продолжить использовать LabView для приобретения (и возможно попытаться заставить Ваших коллег договариваться о комплекте инструментальных средств для приобретения, и создание доступно для всех), и затем переместитесь в экспорт данных в CSV (или подобный) и выполнение анализа в R. Существует действительно очень мало точки в перестраивании колеса в этом отношении.
Я работаю физиком в британском университете.
, Возможно, я должен подчеркнуть, что различные области исследования имеют другой акцент на программирование. Физики частицы (как dmckee) делают численное моделирование почти исключительно и могут сотрудничать на больших проектах программного обеспечения, тогда как люди в полях как мое собственное (конденсированное вещество) пишут код относительно нечасто. Я подозреваю, что большинство ученых попадает в последний лагерь. Я сказал бы, что кодирующие навыки обычно замечаются, как полезный в физике, но не важный, во многом как навыки физики/математики рассматриваются как полезный для программистов, но не важные. С этим в памяти...
Обычно анализ данных и графическое изображение сделаны с помощью универсальных пакетов анализа данных такой в качестве IGOR Pro, ИСТОЧНИК , Kaleidegraph, который может считаться 'Excel плюс'. Эти пакеты обычно имеют язык сценариев, который может использоваться для автоматизации. Больше анализа специалиста может иметь специализированную утилиту для задания, которое обычно будет писаться давным-давно, никто не имеет источник для и довольно ошибочен. Еще некоторые типы техника могли бы использовать языки, которые были упомянуты (Python, R, MatLab с Gnuplot для графического изображения).
программное обеспечение Control обычно делается в LabVIEW, хотя мы на самом деле используем Delphi, который несколько необычен.
я был к семинарам по грид-вычислениям, 3D визуализации, изучив Повышение, и т.д. данное обоими университетами, в которых я был. Как студент нам преподавали VBA для Excel и MatLab, но C/MatLab/LabVIEW более распространен.
нет, хотя у людей действительно есть персональные установки разработки. Наша кодовая база находится в совместно используемой папке на 'сервере', который держится в курсе синхронизирующего инструмента.
Один шаг за один раз! Я пытаюсь заменить совместно используемую папку чем-то немного более твердым, возможно, находя клиент SVN, который подражает текущему синхронизирующему поведению инструментов, помог бы.
я сказал бы, хотя в целом, для большинства проектов естествознания, время обычно лучше проводится, проводя исследование!
Я настоятельно рекомендовал бы чтение , "Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой" . Много проблем, с которыми я встречаюсь регулярно, возникает из проблем с программированием с плавающей точкой.
1.) Языки сценариев популярны в эти дни для большинства вещей из-за лучших аппаратных средств. Perl/Python/Lisp распространен для легких приложений (автоматизация, легкое вычисление); я вижу много Perl на моей работе (вычислительный EM), так как нам нравится Unix/Linux. Для материала производительности обычно используются C/C ++/Fortran. Для параллельных вычислений, ну, в общем, мы обычно вручную параллелизируем выполнения в EM в противоположность наличию программы, неявно делают это (т.е. разделите задания углом взгляда при вычислениях эффективных площадей отражения).
2.) Мы просто вид людей броска в соединение здесь. Много кода, который мы имеем, очень грязно, но ученые обычно являются легкомысленным набором, которые не возражают против такой вещи. Не идеальный, но у нас есть вещи поставить, и мы сильно неукомплектованы. Мы медленно - улучшение.
3.) Мы используем SVN; однако, у нас нет программного обеспечения отслеживания ошибок. Почти столь хороший, как это добирается для нас, txt файл, который говорит Вам, где ошибки определенные ошибки.
4.) Мое предложение для реализации лучших практик для ученых: медленно делают это . Как ученые, мы обычно не поставляем продукты. Никто в науке не делает имя себе при наличии чистого, удобного в сопровождении кода . Они получают распознавание от результатов того кода, обычно. Они должны видеть выравнивание для того, чтобы провести время при изучении методов программного обеспечения. Медленно представляйте новые понятия и пытайтесь заставить их следовать; они - ученые, поэтому после того, как их собственное эмпирическое доказательство подтвердит полноценность вещей как управление версиями, они начнут использовать все это время!
Я не точно 'естественный' ученый (я изучаю транспортировку), но академик, который пишет много моего собственного программного обеспечения для анализа данных. Я пытаюсь записать так, как я могу в Python, но иногда я вынужден использовать другие языки, когда я работаю над расширением или настройкой существующего программного инструмента. В моем поле существует очень мало обучения программированию. Большинство людей или выучилось самостоятельно, или освоило свои навыки программирования от уроков, посещаемых ранее или вне дисциплины.
я - большой поклонник управления версиями. Я использовал Хранилище, работающее на моем домашнем сервере для всего кода для моей диссертации. Прямо сейчас я пытаюсь заставить отдел настраивать сервер Подрывной деятельности, но мое предположение, я буду единственным, кто использует его, по крайней мере, сначала. Я играл вокруг немного с FogBugs, но в отличие от управления версиями, я не думаю, что это почти как полезное для индивидуальной команды.
Что касается ободрительных других для использования управления версиями и т.п. это - действительно проблема, с которой я сталкиваюсь теперь. Я - планирование того, чтобы вынуждать моих студентов градиента использовать его на научно-исследовательских работах, которые они делают для меня и поощряют их использовать его для своего собственного исследования. Если я буду преподавать программирование вовлечения класса, то я, вероятно, буду вынуждать студентов использовать управление версиями там также (градуирующий их на том, что находится в репозитории). Насколько мои коллеги и их студенты градиента идут, все, что я могу действительно сделать, делают сервер доступным и полагаются на мягкое убеждение и подающий хороший пример. Откровенно говоря, в этой точке я думаю, что более важно получить их делающий регулярные резервные копии, чем получают их на управлении исходным кодом (некоторые люди несут вокруг единственной копии их данных исследований по картам флэш-памяти с интерфейсом USB).
Это могло бы быть немного тангенциальным, но надо надеяться релевантным.
я раньше работал на Национальные Инструменты, R& D, где я записал программное обеспечение для NI РФ & Коммуникационные инструментарии. Мы использовали LabVIEW вполне немного, и здесь являемся методами, которые мы применили:
Ядерный / физика элементарных частиц здесь.
Для улучшения вещей:
Еще одно предложение для улучшения вещей.
Курс Плотницкие работы программного обеспечения нацелены конкретно на людей, делающих научные вычисления, и имеют целью преподавать основы и уроки разработки программного обеспечения, и как лучше всего применить их к проектам.
Это затрагивает темы как управление версиями, отладка, тестирование, пишущий сценарий и различные другие проблемы.
я слушал приблизительно 8 или 9 из лекций и думаю, что это должно быть настоятельно рекомендовано.
Редактирование: MP3s лекций доступны также.
Экс-академический физик и теперь промышленный физик Великобритания здесь:
, Какие языки/среды Вы использовали для разработки научного программного обеспечения, особенно анализ данных? Какие библиотеки? (Например, что Вы используете для графического изображения?)
я главным образом использую MATLAB в эти дни (легкий получить доступ к функциям визуализации и математике). Я раньше использовал Фортран много и IDL. Я использовал C (но я - больше читатель, чем писатель C), макросы Excel (ужасный и сбивающий с толку). Я должен в настоящее время быть в состоянии считать Java и C++ (но я не могу действительно программировать в них), и я взломал Python также. Для моих собственных развлечений я теперь делаю некоторое программирование в C# (главным образом для получения мобильности / низкая стоимость / симпатичные интерфейсы). Я могу записать Фортран с в значительной степени любым языком, с которым я представлен;-)
Было там какое-либо обучение людям без каких-либо значительных знаний в программировании?
Большинство (все?) студенческий курс физики будет обычно иметь маленький ход программирования о C, Фортране или MATLAB, но это - реальные основы. Я действительно хотел бы иметь некоторое обучение в разработке программного обеспечения в какой-то момент (управление версиями / тестирующий / разработка средних систем масштаба)
, у Вас было что-нибудь как управление версиями, отслеживание ошибок?
я начал использовать Подрывную деятельность / TortoiseSVN относительно недавно. Группы, с которыми я работал в прошлом, использовали управление версиями. Я не знаю академической группы, которая использует формальное программное обеспечение отслеживания ошибок. Я все еще не использую вида систематического тестирования.
, Как был бы Вы идти о попытке создать достойную среду для программирования, не попадая слишком много путем индивидуальных ученых (особенно физики являются упрямыми людьми!)
я попытался бы представить некоторые идеи разработки программного обеспечения на студенческом уровне и затем укрепить их практикой на уровне выпускника, также обеспечить указатели на ресурсы как упомянутый выше курс Плотницких работ программного обеспечения.
я ожидал бы, что значительная часть академических физиков будет писать программное обеспечение (не обязательно все, хотя), и они находятся в страшной потребности, по крайней мере, введения в идеи в разработке программного обеспечения.
Еще один хороший вариант - Scilab . В нем есть графические модули типа LabVIEW , есть собственный язык программирования, и вы также можете встраивать, например, код Fortran и C. Он используется в государственном и частном секторах, в том числе в крупных промышленных компаниях. И это бесплатно.
Что касается управления версиями, некоторые предпочитают Mercurial , так как он дает больше свободы в управлении и определении репозиториев. Однако у меня нет опыта с этим.
Для построения я использую Matplotlib . Скоро мне придется делать анимацию, и я увидел хорошие результаты с помощью MEncoder . Вот пример , включающий звуковую дорожку.
Наконец, я предлагаю перейти на модульную систему, то есть попытаться сохранить основные части кода в разных файлах, чтобы пересмотреть код, понять, обслуживание и улучшение станет проще. Я написал, например, модуль Python для проверки целостности файлов, другой модуль для последовательностей обработки изображений и т. Д.
Вам также следует рассмотреть возможность разработки с использованием отладчика, который позволяет вам проверять содержимое переменных в устанавливаемых точках останова в коде, вместо этого используйте линии печати. Я использовал Eclipse для разработки Python и Fortran (хотя у меня возникла ложная ошибка при компиляции с ним короткой программы Fortran, но, возможно, это была плохая конфигурация), и я начинаю использовать Eric IDE для Python. Он позволяет вам отлаживать и управлять версиями с помощью SVN , он имеет встроенную консоль, он может выполнять рефакторинг с помощью Bicycle Repair Man (он также может использовать другой), у вас есть Unittest и т. Д. Более легкая альтернатива для Python - IDLE , включенный в Python с версии 2.3.
В качестве нескольких подсказок я также предлагаю:
Не использовать односимвольные переменные. Если вы захотите выполнить поиск по внешнему виду, вы получите результаты везде. Некоторые утверждают, что приличная IDE упрощает эту задачу, но тогда вы будете зависеть от постоянного доступа к IDE. Даже использования ii, jj и kk может быть достаточно, хотя этот выбор будет зависеть от вашего языка. (Двойные гласные будут менее полезны, если комментарии к коду сделаны, например, на эстонском языке.)
Комментирование кода с самого начала.
Для критически важных приложений иногда лучше полагаться на старый язык / версии компилятора (основные выпуски), более стабильные и лучше отлаженные. Конечно, у вас может быть более оптимизированный код в более поздних версиях, исправленные ошибки и т.д., но я говорю об использовании Fortran 95 вместо 2003, Python 2.5.4 вместо 3.0 или около того. (Особенно, когда новая версия нарушает обратную совместимость.) Множество улучшений обычно приводят к множеству ошибок. Тем не менее, это будет зависеть от конкретных случаев применения! Обратите внимание, что это личный выбор, многие люди могут возразить против этого.
Используйте резервное и автоматическое резервное копирование! (С контролем версий).
Самоорганизующаяся карта (SOM) - это метод кластеризации, рассматриваемый как вариант без учителя искусственной нейронной сети (ИНС) . Он использует методы конкурентного обучения для обучения сети (узлы конкурируют между собой, чтобы показать самую сильную активацию заданных данных)
Вы можете думать о SOM, как если бы он состоял из сетки взаимосвязанных узлов (квадрат форма, шестиугольник, ..), где каждый узел представляет собой N-тусклый вектор весов (тот же размер, что и точки данных, которые мы хотим сгруппировать).
Идея проста; учитывая вектор в качестве входных данных для SOM, мы находим узел клозет к нему, затем обновите его веса и веса соседних узлов, чтобы они приблизились к весам входного вектора (отсюда и название самоорганизующиеся). Этот процесс повторяется для всех входных данных.
Формируемые кластеры неявно определяются тем, как узлы организуются и образуют группу узлов с одинаковыми весами. Их легко увидеть визуально.
SOM похожи на алгоритм K-средних , но отличаются тем, что мы не устанавливаем фиксированное количество кластеров, вместо этого мы указываем количество и форму узлов в сетке, которые мы хотим адаптировать к нашим данным.
Обычно, когда у вас есть обученный SOM, и вы хотите классифицировать новый тестовый входной вектор, вы просто назначаете его ближайшему (расстоянию как меру сходства ) узел сетки ( Best Matching Unit BMU), используется для разработки научных программное обеспечение, особенно анализ данных? какой библиотеки? (Например, что вы используете для
Я вижу здесь множество людей, использующих FORTRAN (в основном 77, но около 90), много Java и немного Python. Мне они не нравятся, поэтому я их не использую.
Был ли тренинг для людей? без какого-либо значительного фона в программирование?
Я думаю, что это не относится ко мне, так как я получил высшее образование в области CS - но там, где я работаю, нет формального обучения, но люди (инженеры, физики, математики) действительно помогают друг другу.
Помогали ли они. у тебя есть что-то вроде версии контроль, отслеживание ошибок?
Контроль версий абсолютно важен! Я храню свой код и данные на трех разных машинах, в двух разных частях света - в репозиториях Git. Я синхронизирую их все время (так что у меня есть система управления версиями и резервных копий!) Я не занимаюсь контролем ошибок, хотя могу начать это делать. Но мои коллеги вообще не используют BTS или VCS.
Как бы вы пытались это сделать? создать достойную среду для программирование, не вдаваясь в подробности на пути личности ученые (особенно физики упрямые люди!)
Во-первых, я бы дал им как можно больше свободы. (В университете, где я работаю, я мог выбирать между тем, чтобы кто-то установил Ubuntu или Windows, или мою собственную ОС - я решил установить свою собственную. У меня нет поддержки от них, и я несу ответственность за все, что происходит с мои машины, включая проблемы с безопасностью, но я делаю с машиной все, что хочу).
Во-вторых, я посмотрю, к чему они привыкли, и заставлю ее работать (нужен FORTRAN? Мы его настроим. Нужен C ++ ? Нет проблем. Mathematica? Хорошо, купим лицензию). Затем посмотрите, сколько из них хотели бы изучить «дополнительные инструменты», которые помогут им работать более продуктивно (не говорите «разные» инструменты. Скажите «дополнительные», чтобы не казалось, что кто-то «проиграет» или «позволит» идти "или что-то еще). Начни с редакторов, Не навязывайте - покажите на примерах, насколько круты эти инструменты Проведите анализ данных с помощью R и покажите им, насколько это просто. Покажите красивую графику и объясните, как вы их создали (но начните с простых примеров, чтобы вы могли быстро объяснить их).
Я бы предложил F # в качестве потенциального кандидата для выполнения манипуляций, связанных с наукой, учитывая его сильную семантическую связь с математическими конструкциями.
Кроме того, поддержка единиц измерения, как написано в здесь , имеет большой смысл для обеспечения правильного преобразования между математической моделью и исходным кодом реализации.
Я физик, работающий в области физики конденсированного состояния, построение классических и квантовых моделей.
Языки:
Библиотеки:
Графика:
Инструменты разработки: