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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

17092閲覧

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

SuzuAya

総合スコア71

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/04/15 11:52

前提・実現したいこと

コードを実行中に発生したエラーについて、どのようにコードを修正すればエラーが改善されるか教えて頂きたいです。
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

エラーの原因について

python

1# エラーの再現 2np.arange(451584).reshape(128, 1176) 3 4''' 5ValueError Traceback (most recent call last) 6<ipython-input-11-e2da9df90492> in <module> 7----> 1 np.arange(451584).reshape(128, 1176) 8 9ValueError: cannot reshape array of size 451584 into shape (128,1176) 10'''

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/06 12:22

siruku6

総合スコア1382

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SuzuAya

2019/10/07 03:54

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

2019/10/07 09:37

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問