(m、n)配列に変換したい1,000個のRGBイメージ(64X64)があります。
私はこれを使用します:
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
それは私に与える:(1000, 64, 64, 3)
今私がするなら:
pixels = x_data.flatten()
print pixels.shape
取得:(12288000,)
ただし、次の次元の配列が必要です:(1000, 12288)
どうすればそれを達成できますか?
reshape()
を平坦化された配列に適用した後、numpyメソッドflatten()
を適用します。
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
これを試して:
_d1, d2, d3, d4 = x_data.shape
_
次にnumpy.reshape()
を使用します
_x_data_reshaped = x_data.reshape((d1, d2*d3*d4))
_
または
_x_data_reshaped = x_data.reshape((d1, -1))
_
(Numpyは、元の長さと定義された次元_-1
_から_d1
_の代わりに値を推測します)
画像配列を反復処理し、各行を個別にフラット化できます。
numImages = x_data.shape[0]
flattened = np.array([x_data[i].flatten() for i in range(0,numImages)])