"Expliquons: ou pourquoi un programmeur mathématicien." Un livre sur la façon de ne pas manquer les cours de mathématiques

TL; DR Un petit livre sur les mathématiques pour les programmeurs. Version électronique et papier par référence .

J'enseigne dans les universités depuis 9 ans. Pendant ce temps, les élèves ont changé. Mon impression subjective est qu'un étudiant de première année moderne apprécie beaucoup plus son temps. Dans des conditions de fréquentation gratuite, même d'excellents étudiants doivent être sûrs qu'une conférence particulière leur sera bénéfique, comparable à 1,5 heure à Kaggle ou Coursera. Il semble que la disponibilité d'explications de qualité garantie tue déjà le format de conférence classique . Par conséquent, la deuxième conférence du cours pour de nombreux professeurs a généralement lieu devant un public beaucoup plus petit. Dans un public plus restreint, les élèves ont une plus grande manœuvre pour les questions, et la question la plus courante que j'ai entendue par deux sur les algorithmes et la discrétisation est «Pourquoi?».

Pourquoi des formules combinatoires? Quelle est la prise de toutes ces probabilités conditionnelles, qui sont généralement expliquées sur des paniers et des balles? Pourquoi multiplier les matrices? Et pourquoi des matrices inverses sont-elles nécessaires? Eh bien, voici une recherche en premier, et cho?

Cela ne veut pas dire que pendant mes propres étudiants en informatique, j'ai reçu des réponses claires à toutes ces questions. Mais l'expérience dans des entreprises de types complètement différents m'a partiellement rapproché de la compréhension. Dans mes paires, j'essaie de donner des exemples non pas sur des chats, de construire des analogies pas évidentes et de rapprocher généralement l'industrie des mathématiques. De plus, l'audience totale de toutes mes classes au fil des ans est peu susceptible d'avoir dépassé 1000 personnes. J'ai donc trouvé un tas d'explications et écrit un livre avec des exemples pour les programmeurs.

Ci-dessous, je vais donner un petit fragment. Vous pouvez prendre possession du livre sous forme papier ou électronique en cliquant sur le lien . Vos commentaires sont les bienvenus! Pourchassé.

Patinoires de Moscou


Moscou L'extérieur est l'hiver, pas très froid, ensoleillé. Dimanche matin. Vous avez réussi le test ou même un examen d'algèbre linéaire, et vous avez vos propres patins. Que faut-il d'autre pour le bonheur?

Voulez-vous aller à la patinoire!

Au cours d'une tasse de thé, vous avez conçu un plan. Vous êtes intéressé par des patinoires assez proches de la maison, mais cela ne suffit pas, vous avez encore besoin de commodités. Mieux vaut laisser ces patinoires gratuites, avec Wi-Fi et toilettes.

Vous avez appelé de nombreuses patinoires A à proximité, et des plus pratiques - B. Et comme nous nous intéressons à la fois à la proximité et à la commodité, notre objectif est de croiser ces ensembles AB. Où trouvons-nous ces ensembles?

Parcourir les sites de la patinoire ou lire les avis sur les affiches n'est pas votre méthode. Par conséquent, vous accédez au portail de données ouvertes de Moscou , ou plutôt, un script Python le fait pour vous, dont un exemple peut être trouvé sur le site Web du livre dans le document M02 - vecteurs (patinage) . Vous trouvez qu'il y a beaucoup de patinoires à Moscou - 1350. Comment allons-nous chercher? Ici, vous vous souvenez d'un manuel sur l'algèbre linéaire et comprenez que vous devez mapper les rouleaux aux deux espaces de signes dont vous avez besoin: coordonnées bidimensionnelles (latitude, longitude) et tridimensionnelles - commodités (Wi-Fi, toilettes, gratuit) .

Dans le deuxième espace, la présence de l'attribut sera l'unité et l'absence sera nulle, ce qui signifie que la normalisation de ces données n'est plus nécessaire. Nous ne normaliserons pas non plus les coordonnées, car elles sont comparables à nos latitudes (sinon, il faudrait choisir un point de référence et convertir les degrés en mètres). Et puis choisissez seulement les options les plus intéressantes - pourquoi avez-vous besoin d'une patinoire, qui est de l'autre côté de la ville ou dans laquelle il n'y a évidemment pas de commodités? Pour tous les espaces, nous prendrons uniquement les données avec la plus petite distance euclidienne à la cible.

def topN(expected, data, N): norms = list(map( lambda row, number: (np.linalg.norm(row - expected), number), data, range(len(data)))) #  (, ) norms.sort(key=lambda r: r[0]) #  return set(map(lambda r: r[1], norms[:N])) #   

Tout est prêt. Il ne reste plus qu'à regarder quelque part nos propres coordonnées (maintenant cela peut être fait dans n'importe quelle application avec des cartes) et trouver toutes les patinoires appropriées sur
l'intersection des ensembles A et B :

 me_geo = np.array([37.676289, 55.772266]) #     me_conv = np.array([1.0, 1.0, 1.0]) # : Wi-Fi, ,  depth = 1 A, B = set(), set() #      —   while not A & B: A = topN(me_geo, latlon, depth) B = topN(me_conv, convenience, depth) depth += 1 for rink in A & B: print(rinks[rink]["Address"]) 

Pour les données de l'exemple, parmi les 30 patinoires les plus proches, nous obtenons une patinoire sur Staraya Basmannaya, mais avec toutes les commodités. Et vous pouvez même marcher.



Essayez d'utiliser le portail de données ouvertes de Moscou pour trouver indépendamment le Wi-Fi ouvert le plus proche, un cinéma d'été ou des caméras de surveillance de cour les plus proches de vous.

Source: https://habr.com/ru/post/fr427395/


All Articles