質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

Python3 ValueError(cannot reshape array of size 451584 into shape (128,1176))の解決方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 626

SuzuAya

score 34

前提・実現したいこと

コードを実行中に発生したエラーについて、どのようにコードを修正すればエラーが改善されるか教えて頂きたいです。
npのreshapeがうまくいっていないようでしたので、他の質問も参考に以下の通り修正したのですがうまくいきませんでした。
また、他にもおかしな点があれば併せてご指摘いただけますと幸いです。

発生している問題・エラーメッセージ

ValueError: cannot reshape array of size 451584 into shape (128,1176)

該当のソースコード

import numpy as np
import os
from PIL import Image
import glob
import re
from arrange_augmentator import Augmentation #自作モジュール
from arrange_data_resize import Data #自作モジュール

FROM_DIR = "./folder_a/train/output"

def numericalSort(value):
numbers = re.compile(r'(\d+)')
parts = numbers.split(value)
parts[1::2] = map(int, parts[1::2])
return parts

class Make_train():
def image_list(self):
test = np.empty((0, 128, 1176, 1), int)
for infile in sorted(glob.glob(os.path.join(FROM_DIR, "*.png")),key=numericalSort):
im = Image.open(infile)
gray_im = im.convert('L')
gray_array = np.array(gray_im)
im_reshape = np.reshape(gray_array, (1,128,1176,1))
test = np.concatenate([test,im_reshape])
if len(test)==2:
break

return test

if name == 'main':
_, x_test = Augmentation().run()
print("run augmentor.py")
x_train = Make_train().image_list()
np.save('./x_train_augmentor.npy',x_train)
np.save('./ae_x_test.npy',x_test)

試したこと

エラー元を見ると、上記のコード内の自作モジュールAugmentator.pyの方のreshapeがうまくいっていないようだったので、以下の通り修正しました。
(修正前はimage = np.reshape(image, (128,1176))としていました)
import numpy as np
from PIL import Image
import Augmentor
from arrange_data_resize import Tomography

class Augmentation():

def run(self):     
x_train, x_test = Data().make()
image_size = x_train.shape[1]
img_rows,img_cols = 128,1176
for i in range(len(x_train)):
image = x_train[i:i+1,:,:]
image = np.reshape(image, (1,128,1176,1))
pilImg = Image.fromarray(np.uint8(image))
if i==2:
break
pilImg.save('./folder_a/train/data_%d.png' %i)

images_dir = "./folder_a"
output_dir = './folder_a/train'
os.makedirs(output_dir, exist_ok=True)
p = Augmentor.Pipeline(images_dir)
p.rotate(probability=0.7, max_left_rotation=5, max_right_rotation=5)
p.sample(1400)    
return x_train,x_test

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

今更感がありますが、、、

同じ問題で困った人向けに回答を記載します。

エラーの原因について

# エラーの再現
np.arange(451584).reshape(128, 1176)

'''
ValueError                                Traceback (most recent call last)
<ipython-input-11-e2da9df90492> in <module>
----> 1 np.arange(451584).reshape(128, 1176)

ValueError: cannot reshape array of size 451584 into shape (128,1176)
'''

np.reshape メソッドを呼び出すときは、reshape前後で配列の総サイズが一致していなければないようです。
今回の配列サイズは451584ということですが、reshape後のサイズ128 * 1176 = 150528 になっているため、エラーが発生しています。

対策

この問題を解消するためには、

  • 配列の元のサイズを 150528 にする

もしくは

  • reshape((3, 128, 1176))reshape((128, 3, 1176))などする

ことで、変換前後で要素の総数が同じになるよう調節しなければいけないようです。
(色の話をしているようなので、reshape((3, 128, 1176))reshape((3, 1176, 128))が正しそう...)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/07 12:54

    >siruku6様
    ご回答いただき、ありがとうございました!勉強になりました。

    キャンセル

  • 2019/10/07 18:37

    私もこのときreshapeエラーを出して検索してここにたどり着きました。
    多少でも力になれれば幸いです!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる