J'ai 1000 images RVB (64X64) que je veux convertir en un tableau (m, n).
J'utilise ceci:
import numpy as np
from skdata.mnist.views import OfficialImageClassification
from matplotlib import pyplot as plt
from PIL import Image
import glob
import cv2
x_data = np.array( [np.array(cv2.imread(imagePath[i])) for i in range(len(imagePath))] )
print x_data.shape
Ce qui me donne: (1000, 64, 64, 3)
Maintenant, si je le fais:
pixels = x_data.flatten()
print pixels.shape
Je reçois: (12288000,)
Cependant, j'ai besoin d'un tableau avec ces dimensions: (1000, 12288)
Comment puis-je y parvenir?
Appliquez la méthode numpy reshape()
après avoir appliqué flatten()
au tableau aplati:
x_data = np.array( [np.array(cv2.imread(imagePath[i])) for i in range(len(imagePath))] )
pixels = x_data.flatten().reshape(1000, 12288)
print pixels.shape
Essaye ça:
d1, d2, d3, d4 = x_data.shape
puis en utilisant numpy.reshape()
x_data_reshaped = x_data.reshape((d1, d2*d3*d4))
ou
x_data_reshaped = x_data.reshape((d1, -1))
(Numpy déduit la valeur au lieu de -1
De la longueur d'origine et de la dimension définie d1
)
Vous pouvez parcourir votre tableau d'images et aplatir chaque ligne indépendamment.
numImages = x_data.shape[0]
flattened = np.array([x_data[i].flatten() for i in range(0,numImages)])