1
votes

Quelle est la différence entre la forme (150,) et la forme (150,1)?

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.


12 commentaires

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 sujet


La notation (x,) EST pythonique; c'est la manière de python d'afficher un seul élément tuple . Ce n'est pas une innovation stupide.


3 Réponses :


3
votes

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)


1 commentaires

Même concept mais le vecteur est transposé.



0
votes

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


0 commentaires

0
votes

Des questions comme celle-ci semblent provenir de deux idées fausses.

  • ne réalisant pas que (5,) est un tuple à 1 élément.
  • s'attendant à des matrices semblables à MATLAB

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)!


0 commentaires