Hello World – Telegram
Hello World
1.68K subscribers
71 photos
6 videos
3 files
161 links
Be so good that you cannot be ignored. And then, go one step beyond.
Download Telegram
​​Начну издалека. Как думаете, правда ли что выучить Python и стать качественным специалистом легко?

Разумеется, у Python довольно низкий порог вхождения. Это означает что на нем очень легко освоить азы программирования. Но по сути, все что можно найти в интернете – это и есть только основы и азы. Они не помогут научиться чему-то основательно.

Поначалу может показаться, что обучение дается легко, но впереди будут ждать трудности. Асинхронное и функциональное программирование, threading, multiprocessing, sockets, метаклассы – все эти темы непросто найти и изучить самостоятельно. При этом не стоит забывать, что помимо теории необходима и практика – минимум 4-6 часов в неделю.

С любовью к обучению и программированию, мы с коллегой открыли @python_academy. Мы вложили собственные средства на развитие этого проекта, и немало сил на создание качественного контента. И это было не зря – мы получаем восторженные отзывы наших учеников. Благодаря вам мы продолжаем работать над качеством нашего материала.

У нас вы научитесь писать чистый и быстрый код. Многие ошибочно думают что если умеешь писать код, то и преподавать тоже получится. Не получится. Когда знаешь очень много всего, становится трудно вспомнить как это – не понимать.

Но мой опыт преподавания и работы со студентами насчитывает без малого 3 года, поэтому я точно знаю как нужно преподносить материал так, чтобы все всё поняли.

Более полная информация о ближайшем курсе тут.

Задать вопрос и записаться на курс можно у меня @dartrisen и у моего коллеги @a1f20.
This media is not supported in your browser
VIEW IN TELEGRAM
Собирайте команду и присоединяйтесь к онлайн-хакатону по digital-communications от КРОК - YoHack

C 23 по 26 апреля KPOK собирает кросс-возрастные команды зумеров и бумеров (школьников и студентов, специалистов IT-компаний) для решения проблем digital-коммуникций. 

👨‍💻Сможете поизучать различные тренды сети: создать переводчик мемов, измеритель достоверности информации, анализатор оскорбительности постов или реализовать свою digital-идею.

📲 Регистрация открыта до 20 апреля включительно. 👉 yohack.ru
Hello World
Новая рубрика на канале Вы давно меня просили сделать нечто подобное. Поэтому, предлагаю вашему вниманию задачу с соревнования Яндекса 2019 года: Дан массив a из n целых чисел. Напишите программу, которая найдет число, которое чаще других встречается в массиве.…
Возможное решение для задачи

Посмотреть код

Это довольно таки простая задача, которую можно решить как с использованием обычного словаря, так и с использованием структуры Counter из модуля collections.

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

Решение требует O(n) времени и O(n) дополнительной памяти.

P.S. немного приболел, извините за отсутствие постов, в ближайшее время будет что-нибудь интересное по data science.
​​Последний релиз Python 2.x

Кстати говоря, не так давно вышла последняя версия Python 2.7, а именно Python 2.7.18.

Эта версия является специальным выпуском. Я имею в виду, конечно, тот факт, что "2.7.18" является ближайшим номером версии Python которая примерно равна числу e, или числу Эйлера.

Менее трансцендентное свойство Python 2.7.18 заключается в том, что это последний выпуск Python 2.7. и, следовательно, последний выпуск Python 2.

Любителям CPython пришло время попрощаться с Python 2. Эта версия поддерживалась почти 10 лет параллельно с обратно-несовместимыми версиями Python 3. Теперь же остаётся только одна версия языка, которая продолжит развиваться.

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

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

Для работы с такими интегралами (и не только) и был создан пакет sympy. В свою очередь, метод subs позволяет подставить какое-то определенное значение. Но для вычисления предела, или если выбранная точка является сингулярной, лучше используйте limit.
you = |gay> + |not gay>

Тут IBM анонсирует свой Quantum Challenge, который кстати говоря начался совсем недавно. Таким образом они празднуют свою четвертую годовщину квантовых вычислений.

Дают 4 дня и 4 задания для проверки своих навыков. Принять вызов можно по этой ссылке. И как я понял, все это можно сделать на вашем любимом языке 🏳️‍🌈.

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

Так что занимайте ваши основные состояния и погнали.

P.S. а если вы ничего не смыслите в квантовой механике, не переживайте, даже Фейнман в свое время говорил что по-настоящему ее никто не понимает.
Одноразовая функция в классе

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

#tips
Основные научные библиотеки Python

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

📌 Библиотека SciPy задействует массивы NumPy в качестве базовой структуры данных. Кроме того, она содержит в себе модули для решения задач научного программирования, включая линейную алгебру, анализ, особые функции и константы, а также обработку сигналов.

📌 Хотя NumPy является частью проекта SciPy, она содержит лишь базовую функциональность SciPy. NumPy обходит проблему медленных алгоритмов в Python путем использования многомерных массивов и функций, которые работают с этими массивами. 

📌 Matplotlib — это гибкая библиотека для создания интерактивных 2D и 3D графиков. А тем, кто работает со статистикой, стоит взглянуть на Seaborn, более новую библиотеку для работы с графикой, основанную на Matplotlib. Она предназначена для визуализации статистики.
Полезные сниппеты с itertools

Не так давно подписчик в чате поделился своими полезными сниппетами.

group группирует итерируемые объекты в новые объекты размера size, при необходимости заполняя недостающие элементы с помощью fillvalue.

transpose, как очевидно из названия, транспонирует матрицы (а также строки/столбцы различной длины), при необходимости заполняя значения с помощью fillvalue.

Также приложу ссылку на гист.
Мы можем немного ускориться? (с)

Поскольку все методы класса по-умолчанию первым аргументом принимают self, нельзя просто так взять и обернуть метод декоратором vectorize.

Хотя существует несколько способов использования np.vectorize в виде декоратора метода произвольного класса, на мой взгляд самым практичным и удобным является использование partial.

Функция partial – это функция, которая упрощает некоторые элементы функционального программирования, позволяющего например обеспечить частичное применение функции.

Не знаешь что такое vectorize? На моем втором канале @python_academy сегодня будет пост, объясняющий что это такое.

#tips #numpy #vectorize
одобряю
Одной из наиболее полезных библиотек для физиков всех сортов и мастей является LINPACK, или библиотека для работы с линейной алгеброй.

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

Эту библиотеку портировали практически на все известные человечеству языки программирования (например на языке swift, с которым я сейчас работаю, есть модуль Accelerate, основанный на LAPACK и BLAS)

Пакет позволяет работать с матрицами: находить собственные значения и вектора, решения для СЛАУ (системы линейных алгебраических уравнений), и прочее.

#numpy #linalg
​​Основные аспекты численного решения нелинейных уравнений

Нелинейные уравнения, в основном, не могут быть решены аналитически (кроме некоторых частных случаев). В таком случае, имеет смысл рассматривать итеративные алгоритмы нахождения решений.

К примеру, уравнение x = tg(x) является нелинейным. Начальные приближения можно сделать, если читатель имеет представление о ряде Тейлора. Решение x = 0 напрашивается само собой, поскольку тангенс вблизи нуля ведет себя как линейная функция.

Сходимость
Любое нелинейное уравнение в виде f(x) = 0 всегда можно переписать как x = g(x). В данном случае, если задать произвольную стартовую точку x0, это уравнение можно дискретизировать для дальнейшего численного решения:

x_{n+1} = g(x_{n})

Если уравнение на выбранном интервале имеет некоторое решение a, можно оценить порядок сходимости, или точность метода на шаге n:

eps_{n} = x_{n} - a

Рассмотрим ниже простой пример в виде метода хорд и его реализацию на Python. Для проверки возьмем простую функцию f(x) = x * (x + 2) - 1, таким образом данное уравнение можно решить даже аналитически.

Найденное в результате работы скрипта решение сходится к аналитическому результату, с точностью eps = 1e-3.
​​Complex numbers

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

Весь современный аппарат теоретической физики в той или иной мере использует эти числа, к примеру квантовая механика. Кроме того, они используются и в фурье анализе (модуль scipy.fftpack).

Полезная штука в общем. И в вашем любимом языке программирования, к тому же, complex является встроенным типом. Очень удобно. Если же complex недостаточно, можно импортировать cmath.

Прикрепляю пару примеров и убегаю. Мне еще статью по работе доделывать нужно.

By @hw_code
​​Квантовые вычисления

Сейчас часто говорят о квантовых вычислениях. В теории, квантовая механика может помочь создать новый тип вычислительных машин. Квантовые процессоры смогут решать сверхпроизводительные задачи, недоступные даже самым мощным классическим суперкомпьютерам.

Хотя даже в квантовом мире не все так гладко, но эта отрасль сейчас активно развивается, и кто знает что будет в ближайшие 5-10 лет?

Биты и кубиты

В квантовом компьютере все вычисления тесно связаны с понятием кубита. Кубит - это некоторая квантовая система (например джозефсоновский сверхпроводящий контакт), способная принимать не просто значения 0 и 1, как в случае с классическим битом, а все возможные значения на единичной сфере на картинке ниже, лежащие между 0 и 1. Это называется суперпозицией.

В состоянии суперпозиции значение кубита неизвестно до тех пор, пока его не измерят. На самом деле, конечно, это значение не просто неизвестно, его не существует пока не произведено измерение. Звучит немного странно, но это определено законами квантовой механики.

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

Запутанность и вероятность

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

Чтобы получить рабочий полноценный рабочий кубит, необходимо так же связать его с другими кубитами (т.н. состояние квантовой запутанности), когда измерение, проведенное на одном кубите, сразу отражается на всех остальных.

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

В принципе, один кубит способен выполнять два вычисления одновременно, а когда несколько кубитов связаны друг с другом запутанностью, они могут выполнять уже 2^N операций, где N - число кубитов. Для квантового компьютера с 300 кубитами число одновременно выполняемых операций превзошло бы полное число атомов во Вселенной.

Не так давно в журнале Nature вышла статья, что специалисты из Google добились квантового превосходства при помощи 53 кубитов. Их квантовому процессору потребовалось 200 секунд для решения задачи, которую классический компьютер (по их оценкам) решал бы 10000 лет.
Ссылка на работу

Однако исследователи из IBM в ответной статье утверждают, что идеальную симуляцию той же задачи можно выполнить на классической системе за 2,5 дня, причём с гораздо большей точностью.
Ссылка на работу

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

#лонгрид
Имеет ли смысл 80-символьная длина строки в 2020 году?

Одна из самых старых практик кодирования – поддерживать 80-символьную длину строки, и многие из нас следуют ей вслепую. Однако, задумывались ли вы когда-нибудь, почему мы ставим это правило на первое место?

#совершенный_код
И такое тоже бывает

@hw_code