web-dev-qa-db-ja.com

Numpy Flatten RGBイメージアレイ

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

どうすればそれを達成できますか?

16
apples-oranges

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
6
Ray

これを試して:

_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_の代わりに値を推測します)

5
lskrinjar

画像配列を反復処理し、各行を個別にフラット化できます。

numImages = x_data.shape[0]
flattened = np.array([x_data[i].flatten() for i in range(0,numImages)])
3
James Evans