Quelle est la différence entre la forme (150,) et la forme (150,1)?
Je pense qu'ils sont identiques, je veux dire qu'ils représentent tous les deux un vecteur de colonne.
3 Réponses :
Les deux ont les mêmes valeurs, mais l'un est un vecteur et l'autre est une matrice du vecteur. Voici un exemple:
(5,) (5, 1)
Et le résultat est:
import numpy as np x = np.array([1, 2, 3, 4, 5]) y = np.array([[1], [2], [3], [4], [5]]) print(x.shape) print(y.shape)
Même concept mais le vecteur est transposé.
Bien qu'ils occupent tous deux le même espace et positions en mémoire ,
Je pense qu'ils sont identiques, je veux dire qu'ils représentent tous les deux un vecteur de colonne.
Non, ils ne le sont pas et certainement pas selon NumPy (ndarrays).
La principale différence est que le
shape (150,) => est un tableau 1D, alors que
shape (150,1) => est un tableau 2D
Des questions comme celle-ci semblent provenir de deux idées fausses.
(5,) est un tuple à 1 élément. Créez un tableau avec la fonction pratique arange :
In [432]: x+x
Out[432]: array([0, 2, 4, 6, 8]) # element wise sum
In [433]: x+y
Out[433]:
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]])
numpy fait ne crée pas automatiquement des matrices, des tableaux 2D. Il ne suit pas MATLAB à cet égard.
Nous pouvons remodeler ce tableau, en ajoutant une deuxième dimension. Le résultat est une vue (tôt ou tard, vous devez savoir ce que cela signifie):
In [430]: x
Out[430]: array([0, 1, 2, 3, 4])
In [431]: y
Out[431]:
array([[0],
[1],
[2],
[3],
[4]])
L'affichage de ces 2 tableaux est très différent. Mêmes nombres, mais la disposition et le nombre de crochets sont très différents, reflétant les formes respectives:
In [427]: y = x.reshape(5,1) In [428]: y.shape Out[428]: (5, 1) In [429]: y.ndim Out[429]: 2
La différence de forme peut sembler académique - jusqu'à ce que vous essayiez de faire des calculs avec les tableaux :
In [424]: x = np.arange(5) In [425]: x.shape Out[425]: (5,) # 1 element tuple In [426]: x.ndim Out[426]: 1
Comment cela a-t-il fini par produire un tableau (5,5)? Diffusion d'un tableau (5,) avec un tableau (5,1)!
ils sont différents. ils sont stockés différemment. ils peuvent tous deux "représenter" la même information, mais ils ne peuvent pas être interchangés librement, en raison de la différence structurelle réelle. Le premier est un stockage unidimensionnel. (par exemple, tableau de valeurs). Le second est en 2 dimensions. (Tableau de tableau (ayant la longueur 1) de valeurs)
C'est la différence entre
[1, 2, 3]et[[1], [2], [3]]. Un peu la même chose (en ce que les deux contiennent trois scalaires), mais pas.Ils sont isomorphes.
@Amadan Je pense que c'est plus comme [[1,2,3]].
la virgule de fin n'est en fait pas non plus obligatoire
@FarhoodET: Ce serait la forme
(1, 3), pas(3, 1).@Nenri: La virgule est certainement obligatoire.
(150,)est un 1-tuple.(150)est un nombre entre parenthèses.@Amadan ya mais mettre un nombre comme forme fonctionne aussi
x = np.reshape ([1, 2, 3], 3) print (x.shape)cela vous donnera(3,)c'est ce que je voulais dire@Nenri: La forme est toujours
(3,). Le fait que numpy tuplifie automatiquement un scalaire pour vous si vous en passez un comme forme dans une fonction qui prend un paramètre de forme n'est pas vraiment pertinent. De plus, dire "la virgule n'est pas obligatoire" suggère que vous préfériez(3)- ce qui est une utilisation inutile des parenthèses, et très susceptible de conduire à une erreur tuple vs scalaire plus tard.Mais je voulais dire utiliser un scalaire réel au lieu d'un tuple, donc je suppose que j'aurais dû dire "l'utilisation d'un tuple n'est pas obligatoire aussi". Et même si ce n'est pas pertinent, numpy fonctionne comme ça. Personnellement, je n'aime pas la notation
(x,), que je ne trouve pas pythonique. Mais de toute façon, cela ne mène nulle part, et hors de sujetLa notation
(x,)EST pythonique; c'est la manière de python d'afficher un seul élémenttuple. Ce n'est pas une innovation stupide.