Maison > développement back-end > Tutoriel Python > Quelle est la différence entre les formes (R, 1) et (R,) de NumPy et comment les problèmes de multiplication matricielle peuvent-ils être résolus ?

Quelle est la différence entre les formes (R, 1) et (R,) de NumPy et comment les problèmes de multiplication matricielle peuvent-ils être résolus ?

Susan Sarandon
Libérer: 2024-12-04 14:13:11
original
333 Les gens l'ont consulté

What's the Difference Between NumPy's (R, 1) and (R,) Shapes, and How Can Matrix Multiplication Issues Be Resolved?

Quelle est la différence entre les formes (R, 1) et (R,) dans NumPy ?

Dans NumPy, un Un tableau à une dimension peut être représenté de deux manières : sous forme d'une forme (R, 1) (une liste de nombres) ou sous forme d'une forme (R,) (un liste des listes). Ces deux formes représentent les mêmes données sous-jacentes, mais elles ont des implications différentes pour la multiplication matricielle.

Lorsque vous multipliez deux matrices, leurs formes doivent être compatibles. Si une matrice a une forme (R, 1) et l'autre matrice a une forme (R,), NumPy générera une erreur car les formes ne sont pas alignées. En effet, (R, 1) est une forme bidimensionnelle, tandis que (R,) est une forme unidimensionnelle.

Pour corriger cette erreur, vous pouvez remodeler explicitement l'une des matrices. Par exemple :

import numpy as np

M = np.array([[1, 2, 3], [4, 5, 6]])
ones = np.ones((M.shape[0], 1))

result = np.dot(M[:,0].reshape((M.shape[0], 1)), ones)
Copier après la connexion

Dans cet exemple, nous remodelons la première colonne de M (une forme (R,)) en une forme (R, 1) en utilisant la méthode reshape(). Cela rend les formes des deux matrices compatibles et la multiplication peut être effectuée avec succès.

Existe-t-il de meilleures façons de réaliser l'exemple ci-dessus sans remodeler explicitement ?

Oui, il existe de meilleures façons de réaliser l'exemple ci-dessus sans le remodeler explicitement. Une solution consiste à utiliser la méthode sum() avec l’argument axis. Par exemple :

import numpy as np

M = np.array([[1, 2, 3], [4, 5, 6]])
ones = np.ones((M.shape[0], 1))

result = np.dot(M[:,0], ones) + M[:,1:]
Copier après la connexion

Dans cet exemple, nous utilisons la méthode sum() pour additionner la première colonne de M avec les colonnes restantes. Cela nous donne une matrice avec la même forme que M. Nous pouvons alors effectuer la multiplication sans aucune erreur.

Une autre façon de réaliser l'exemple ci-dessus sans remodeler explicitement est d'utiliser la fonction Broadcast(). Par exemple :

import numpy as np

M = np.array([[1, 2, 3], [4, 5, 6]])
ones = np.ones((M.shape[0], 1))

result = np.dot( np.broadcast_to(M[:,0], M.shape), ones)
Copier après la connexion

Dans cet exemple, nous utilisons la fonction Broadcast() pour diffuser la première colonne de M à la forme de M. Cela rend les formes des deux matrices compatibles, et la multiplication peut être exécuté avec succès.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal