web-dev-qa-db-fra.com

Erreur: impossible de remodeler le tableau de taille 122304 en forme (52,28,28)

J'essaie de remodeler un tableau numpy comme:

data3 = data3.reshape((data3.shape[0], 28, 28))

data3 est:

[[54 68 66 ..., 83 72 58]
 [63 63 63 ..., 51 51 51]
 [41 45 80 ..., 44 46 81]
 ..., 
 [58 60 61 ..., 75 75 81]
 [56 58 59 ..., 72 75 80]
 [ 4  4  4 ...,  8  8  8]]

data3.shape est (52, 2352 )

Mais je reçois toujours l'erreur suivante:

ValueError: cannot reshape array of size 122304 into shape (52,28,28)
Exception TypeError: TypeError("'NoneType' object is not callable",) in <function _remove at 0x10b6477d0> ignored

Que se passe-t-il et comment corriger cette erreur?

METTRE À JOUR:

Je fais cela pour obtenir data3 utilisé ci-dessus:

def image_to_feature_vector(image, size=(28, 28)):

    return cv2.resize(image, size).flatten()

data3 = np.array([image_to_feature_vector(cv2.imread(imagePath)) for imagePath in imagePaths])  

imagePaths contient les chemins d'accès à toutes les images de mon jeu de données. Je veux en fait convertir les données3 en flat list of 784-dim vectors, Cependant, le

image_to_feature_vector 

la fonction le convertit en un vecteur de 3072 dim !!

7
akrama81

Vous pouvez remodeler les tableaux matriciels numpy de telle sorte qu'avant (a x b x c..n) = après (a x b x c..n). c'est-à-dire que le total des éléments dans la matrice doit être le même qu'avant, dans votre cas, vous pouvez le transformer de telle sorte que les données transformées3 aient une forme (156, 28, 28) ou simplement: -

import numpy as np

data3 = np.arange(122304).reshape(52, 2352 )

data3 = data3.reshape((data3.shape[0]*3, 28, 28))

print(data3.shape)

La sortie est de la forme

[[[     0      1      2 ...,     25     26     27]
  [    28     29     30 ...,     53     54     55]
  [    56     57     58 ...,     81     82     83]
  ..., 
  [   700    701    702 ...,    725    726    727]
  [   728    729    730 ...,    753    754    755]
  [   756    757    758 ...,    781    782    783]]
  ...,
[122248 122249 122250 ..., 122273 122274 122275]
  [122276 122277 122278 ..., 122301 122302 122303]]]
4
Kaushik Nayak

Tout d'abord, le nombre d'éléments de votre image d'entrée doit correspondre au nombre d'éléments dans le vecteur d'entités souhaité.

En supposant que ce qui précède est satisfait, ce qui suit devrait fonctionner:

# Reading all the images to a one numpy array. Paths of the images are in the imagePaths
data = np.array([np.array(cv2.imread(imagePaths[i])) for i in range(len(imagePaths))])

# This will contain the an array of feature vectors of the images
features = data.flatten().reshape(1, 784)
0
akilat90