понедельник, 22 ноября 2010 г.

Python vs C# vs Matlab

Недавно начал изучать Pyhon. Изучение идет очень легко и приятно. Я бы даже сказал, что это похоже на общение с человеком, с которым ты во многом согласен. По ходу чтения постоянно возникают мысли "Да! Именно так и должно быть. Здорово!".
В принципе изучение основ заняло несколько часов, язык очень интуитивно понятен и логичен.
Но вот дело подошло к разработке реальной программы и начали возникать сравнения с теми языками на которых я раньше писал то же самое.
Итак, плюсы питона:
  • Поддержка кортежей, списков и словарей на уровне языка - круто!
  • duck typing - поначалу трудно перестроить свой мозг на такую концепцию, но это обещает быть полезным.
  • Простота и прямота синтаксиса.
  • Динамическая типизация.
  • Итераторы.
  • Бесплатный, платформонезависимый.
  • Очень многие вакансии в области Computer vision требуют знание питона.

А теперь, что не понравилось или что я пока не понял:
  • Отсутствие приватных членов класса. Жуть. Все члены публичные? А для обозначения приватности используется _? У меня имеется какая-то личная неприязнь к подчеркиванию в коде. Всегда предпочитал camel, pascal или hungarian notation, а код с большим количеством _ мне казался грязным. Уж не знаю как так получилось.
  • Отсутствие необходимости явного объявления полей класса это конечно плюс, но есть в этом и минус.

Вот пример объявления класса на c#:
class Layer
{
float[][] weights;
float[] biases;
bool isCuda;
public float[] Propagate(float[] inputs)
{
if(isCuda)
return CuPropagate(inputs);
else
return dot(inputs, weights) + biases;
}
private float[] CuPropagate(float[] inputs)
{
//...
}
}

* This source code was highlighted with Source Code Highlighter.
и то же на Python:
class layer:
propagate(
self, inputs)
if self.isCuda :
return self._cuPropagate(inputs)
else:
return dot(inputs, weights) + biases;

_cuPropagate(inputs):
//...

Выглядит более компактно , нет скобок - это плюс, правда везде нужно писать self - напрягает. Но! Пример на C# обладает преймуществами декларативного стиля. Из объявления класса мне понятно, что weights - это матрица float'ов, biases - вектор, что есть флаг isCuda. Прочитав только эти первые строки объявления класса и не видя имплементации мне уже почти все о классе понятно. Кроме того я не смогу вызвать по ошибке CuPropagate и обрушить программу, в случае если cuda непроинициализирована, поскольку метод приватный.
И еще момент. Если я попытаюсь в качестве inputs скормить double[], С ругнется еще на этапе компиляции, тогда как в питоне все нормально скомпилируется, а обнаружится уже тогда, когда видеокарта ругнется и скажет, что double не поддерживается.
  • Отсутствие продвинутой IDE. В C# я могу себе позволить называть функции длинными, осмысленными именами, поскольку знаю, что набирать потом буду всего 3-4 первых символа, дальше подскажет IntelliSence. В последних версиях VS intellisence очень крут. Если я пишу несколько строк подряд в таком виде:

this.visSettingsWindow.RefineButton.Click += new EventHandler(RefineButton_Click);
this.visSettingsWindow.UndoRefineButton.Click += new EventHandler(UndoRefineButton_Click);
this.visSettingsWindow.BorderBlocksButton.Click += new EventHandler(BorderBlocksButton_Click);
this.visSettingsWindow.OcclBorderButton.Click += new EventHandler(OcclBorderButton_Click);

* This source code was highlighted with Source Code Highlighter.
то я набираю th.vi.cl+="Tab""Tab"; следующую строку я уже набираю как th..un.+="Tab""Tab"
При этом я вижу описание каждого члена, данных, которые он хочет на входе и т.п.
Похожего удобства для питона я не знаю. Пробовал pydev для eclipse. Он конечно подсказывает, но крайне мало. Все приходится держать в голове.
  • По поводу консоли питона. Хотелось бы, что бы она была больше похожа на matlab консоль. Т.е. если я ввожу переменную a = rand(10, 5), у меня где-нибудь на панели отображалась информация об этой переменной, чтоб я не держал ее в голове. И еще история введенных команд где-нибудь в стороне.
  • Пока не понял как в питоне реализовать механизм аналогичный делегатам
  • Отсутствие чего-то похожего на LINQ. Бывало, что одна строчка на linq заменяет метод на несколько страниц.
  • Непонятно, можно ли делать вставки в критических по скорости местах на с++, по типу unsafe { } или что-то аналогичное
Хочу подчеркнуть, что это никоим образом не является наездом на питон. Он мне очень нравится, и я буду благодарен, если опытные питонисты мне укажут где я был не прав, или каких важных преимуществ питона не учел.

пятница, 12 февраля 2010 г.

Зацепил меня сегодня комментарий одного товарища на хабре, мол нейросети для распознавания вообще не используются и я налабал статью, правда немного о другом =)
Прошу присоединяться к обсуждению:

воскресенье, 20 сентября 2009 г.

Расширенная реальность



Расширенная реальность - augmented reality, помоему просто офигетельная вещь! Впервые я увидел это в Оклендском университете. Там AR использовалась для визуализации траекторий движения мобильных роботов. Но этот бильярд куда круче смотрится!

среда, 15 июля 2009 г.

Новые исследования зрительной системы

Очень заинтересовала эта новость. Там очень удивляются как это мозг так быстро перестраивается. А помоему, человеку знакомому со сверточными нейронными сетями все очевидно. Поскольку каждый нейрон за счет нелинейной функции активации усиливает входы, получается, что если информация с некоторой области сетчатки не поступает, то существенной становится информация с соседних областей.

вторник, 23 июня 2009 г.

ГОСТы и новый блог

1. Очень доброе дело сделал walter_simons, выложив в свободный доступ полную базу ГОСТов.
2. Я открыл англоязычный блог в основном по тому, что опубликованный мною класс реализации сверточных нейронных сетей привлекает англоязычных ученых
и инженеров. Надеюсь будет время его поддерживать.

понедельник, 12 января 2009 г.

Пневматический мускул

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

вторник, 30 декабря 2008 г.

Стратосферный дирижабль "новой" концепции

Известная своими усилиями в создании стратосферного дирижабля компания Sunswire представила очередную версию своего дирижабля. Как известно главные проблемы дирижаблей - это ветер и поддержание баланса при расходовании топлива. Именно их и решает новый дирижабль. Для лучшей управляемости в условиях ветра дирижабль сделали очень вытянутым и секционным, а оболочку помимо гелия заполнили горючим газом, по плотности идентичным воздуху. Поэтому когда двигатель расходует топливо, и закачивает туда воздух, баланс не меняется.
На видео можно увидеть его полет. Очень похож на китайского воздушного змея.
Более подробно об этом есть здесь http://aerocrat.livejournal.com/54223.html