map reduce matrice
DownloadTélécharger
Actions
Vote :
ScreenshotAperçu
Informations
Catégorie :Category: nCreator TI-Nspire
Auteur Author: yayah
Type : Classeur 3.0.1
Page(s) : 1
Taille Size: 3.45 Ko KB
Mis en ligne Uploaded: 19/12/2024 - 00:28:30
Uploadeur Uploader: yayah (Profil)
Téléchargements Downloads: 3
Visibilité Visibility: Archive publique
Shortlink : http://ti-pla.net/a4421334
Type : Classeur 3.0.1
Page(s) : 1
Taille Size: 3.45 Ko KB
Mis en ligne Uploaded: 19/12/2024 - 00:28:30
Uploadeur Uploader: yayah (Profil)
Téléchargements Downloads: 3
Visibilité Visibility: Archive publique
Shortlink : http://ti-pla.net/a4421334
Description
Fichier Nspire généré sur TI-Planet.org.
Compatible OS 3.0 et ultérieurs.
<<
Voici un exemple de code MapReduce pour calculer le produit matrice-vecteur en utilisant un environnement de traitement distribué, avec deux parties principales : Map et Reduce . Produit Matrice-Vecteur avec MapReduce 1. Cas Simple : Produit Matrice-Vecteur Supposons que le vecteur v v est stocké en mémoire dans chaque worker. Le produit est calculé en émettant les paires (clé, valeur) et en les réduisant ensuite par la somme des produits. Map Pour chaque élément m i j m_{ij} de la matrice M M , on émet un tuple contenant l'index i i et la valeur m i j Å v j m_{ij} cdot v_j : def mapper_matrice_vecteur(key, value): # key: (i, j), value: m_ij i, j = key m_ij = value v_j = vecteur[j] # Le vecteur est stocké en mémoire emit((i, m_ij * v_j)) Reduce Pour chaque clé i i , on effectue une somme des produits des paires reçues dans le Mapper : def reducer_matrice_vecteur(key, values): i = key # Calcul de la somme des produits pour obtenir x_i x_i = sum(values) emit((i, x_i)) 2. Cas Réaliste : Matrice et Vecteur Découpés en Stripes Dans ce cas, la matrice M M est découpée en vertical strips et le vecteur v v en horizontal strips. Chaque worker travaille sur une portion de la matrice et du vecteur. Map Pour chaque stripe de la matrice M M et le vecteur v v , le Map reçoit un morceau de la matrice et l'émet les produits correspondants avec l'index i i et la clé de stripe k k . def mapper_stripes_matrice_vecteur(key, value): # key: (i, k), value: stripe de M i, k = key stripe_M = value # La stripe de la matrice M stripe_v = vecteur_stripes[k] # La stripe correspondante du vecteur v for j, m_ij in stripe_M: emit((i, m_ij * stripe_v[j])) # Emit (i, produit) Reduce Pour chaque clé i i , on effectue une somme des produits reçus dans le Map, de manière similaire au cas simple. def reducer_stripes_matrice_vecteur(key, values): i = key # Calcul de la somme des produits pour obtenir x_i x_i = sum(values) emit((i, x_i)) 3. Produit de Matrices : Solution en Deux Étapes Étape 1 : Jointure naturelle de M M et N N Pour chaque matrice M M et N N , on effectue une jointure naturelle sur la colonne j j pour associer les éléments correspondants de chaque matrice. Map pour M M def mapper_M(key, value): # key: (i, j), value: m_ij i, j = key m_ij = value emit((j, ("M", i, m_ij))) # Emit (j, ("M", i, m_ij)) Map pour N N def mapper_N(key, value): # key: (j, k), value: n_jk j, k = key n_jk = value emit((j, ("N", k, n_jk))) # Emit (j, ("N", k, n_jk)) Reduce pour la Jointure Dans le reduce, nous faisons la jointure sur j j et émettons les paires ( i , k , m i j Å n j k ) (i, k, m_ij cdot n_jk) . def reducer_jointure(key, values): j = key # Les valeurs peuvent être de type ("M", i, m_ij) ou ("N", k, n_jk) for value in values: if value[0] == "M": i = value[1] m_ij = value[2] else: k = value[1] n_jk = value[2] emit((i, k, m_ij * n_jk)) # Emit (i, k, produit) Étape 2 : Regroupement et Agrégation Pour regrouper les résultats, on effectue une réduction sur la clé ( i , k ) (i, k) , et on calcule la somme des produits. def reducer_aggregation(key, values): i, k = key # Calcul de la somme des produits sum_produit = sum(values) emit((i, k, sum_produit)) # Emit (i, k, somme des produits) MapReduce en Une Seule Étape Il est possible de combiner les deux étapes ci-dessus en un seul algorithme, où les opérations de jointure et d'agrégation sont réalisées de manière plus intégrée dans les fonctions Map et Reduce . Cela nécessiterait de manipuler les données de manière plus complexe, mais reste faisable en ajustant les opérations dans chaque fonction. Remarque Dans un environnement de production, vous utiliseriez des frameworks comme Apache Hadoop ou Apache Spark pour implémenter ce genre d'algorithmes en MapReduce de manière distribuée. Ces frameworks gèrent la distribution des tâches et la coordination entre les différents workers de façon transparente. Made with nCreator - tiplanet.org
>>
Compatible OS 3.0 et ultérieurs.
<<
Voici un exemple de code MapReduce pour calculer le produit matrice-vecteur en utilisant un environnement de traitement distribué, avec deux parties principales : Map et Reduce . Produit Matrice-Vecteur avec MapReduce 1. Cas Simple : Produit Matrice-Vecteur Supposons que le vecteur v v est stocké en mémoire dans chaque worker. Le produit est calculé en émettant les paires (clé, valeur) et en les réduisant ensuite par la somme des produits. Map Pour chaque élément m i j m_{ij} de la matrice M M , on émet un tuple contenant l'index i i et la valeur m i j Å v j m_{ij} cdot v_j : def mapper_matrice_vecteur(key, value): # key: (i, j), value: m_ij i, j = key m_ij = value v_j = vecteur[j] # Le vecteur est stocké en mémoire emit((i, m_ij * v_j)) Reduce Pour chaque clé i i , on effectue une somme des produits des paires reçues dans le Mapper : def reducer_matrice_vecteur(key, values): i = key # Calcul de la somme des produits pour obtenir x_i x_i = sum(values) emit((i, x_i)) 2. Cas Réaliste : Matrice et Vecteur Découpés en Stripes Dans ce cas, la matrice M M est découpée en vertical strips et le vecteur v v en horizontal strips. Chaque worker travaille sur une portion de la matrice et du vecteur. Map Pour chaque stripe de la matrice M M et le vecteur v v , le Map reçoit un morceau de la matrice et l'émet les produits correspondants avec l'index i i et la clé de stripe k k . def mapper_stripes_matrice_vecteur(key, value): # key: (i, k), value: stripe de M i, k = key stripe_M = value # La stripe de la matrice M stripe_v = vecteur_stripes[k] # La stripe correspondante du vecteur v for j, m_ij in stripe_M: emit((i, m_ij * stripe_v[j])) # Emit (i, produit) Reduce Pour chaque clé i i , on effectue une somme des produits reçus dans le Map, de manière similaire au cas simple. def reducer_stripes_matrice_vecteur(key, values): i = key # Calcul de la somme des produits pour obtenir x_i x_i = sum(values) emit((i, x_i)) 3. Produit de Matrices : Solution en Deux Étapes Étape 1 : Jointure naturelle de M M et N N Pour chaque matrice M M et N N , on effectue une jointure naturelle sur la colonne j j pour associer les éléments correspondants de chaque matrice. Map pour M M def mapper_M(key, value): # key: (i, j), value: m_ij i, j = key m_ij = value emit((j, ("M", i, m_ij))) # Emit (j, ("M", i, m_ij)) Map pour N N def mapper_N(key, value): # key: (j, k), value: n_jk j, k = key n_jk = value emit((j, ("N", k, n_jk))) # Emit (j, ("N", k, n_jk)) Reduce pour la Jointure Dans le reduce, nous faisons la jointure sur j j et émettons les paires ( i , k , m i j Å n j k ) (i, k, m_ij cdot n_jk) . def reducer_jointure(key, values): j = key # Les valeurs peuvent être de type ("M", i, m_ij) ou ("N", k, n_jk) for value in values: if value[0] == "M": i = value[1] m_ij = value[2] else: k = value[1] n_jk = value[2] emit((i, k, m_ij * n_jk)) # Emit (i, k, produit) Étape 2 : Regroupement et Agrégation Pour regrouper les résultats, on effectue une réduction sur la clé ( i , k ) (i, k) , et on calcule la somme des produits. def reducer_aggregation(key, values): i, k = key # Calcul de la somme des produits sum_produit = sum(values) emit((i, k, sum_produit)) # Emit (i, k, somme des produits) MapReduce en Une Seule Étape Il est possible de combiner les deux étapes ci-dessus en un seul algorithme, où les opérations de jointure et d'agrégation sont réalisées de manière plus intégrée dans les fonctions Map et Reduce . Cela nécessiterait de manipuler les données de manière plus complexe, mais reste faisable en ajustant les opérations dans chaque fonction. Remarque Dans un environnement de production, vous utiliseriez des frameworks comme Apache Hadoop ou Apache Spark pour implémenter ce genre d'algorithmes en MapReduce de manière distribuée. Ces frameworks gèrent la distribution des tâches et la coordination entre les différents workers de façon transparente. Made with nCreator - tiplanet.org
>>