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

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

新規登録して質問してみよう
ただいま回答率
85.30%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

828閲覧

numpyのloadがうまくいかない

miraimirai

総合スコア49

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2024/02/16 03:19

実現したいこと

加工した画像データをnumpyのsaveで保存し、numpyのloadで読み込みたい。

発生している問題・分からないこと

np.save("./dog_cat.npy",xy)と、辞書型にxyをすると
x_train,x_test,y_train,y_test=np.load("./dog_cat.npy",
allow_pickle=True)のところでエラーが発生します

エラーメッセージ

error

1##saveの場合のエラー 2ValueError Traceback (most recent call last) 3Cell In[36], line 13 4 6 xy=(x_train,x_test,y_train,y_test) 5 7 #xy = { 6 8 #"X_train": x_train, 7 9 #"X_test": x_test, 8 10 #"y_train": y_train, 9 11 #"y_test": y_test 10 12 #} 11---> 13 np.save("./dog_cat.npy",xy) 12 13File ~/.pyenv/versions/anaconda3-2023.09-0/lib/python3.11/site-packages/numpy/lib/npyio.py:545, in save(file, arr, allow_pickle, fix_imports) 14 542 file_ctx = open(file, "wb") 15 544 with file_ctx as fid: 16--> 545 arr = np.asanyarray(arr) 17 546 format.write_array(fid, arr, allow_pickle=allow_pickle, 18 547 pickle_kwargs=dict(fix_imports=fix_imports)) 19 20ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (4,) + inhomogeneous part. 21 22##辞書型にxyを保存した場合(コメントアウトした部分)のエラー 23TypeError Traceback (most recent call last) 24Cell In[34], line 1 25----> 1 x_train,x_test,y_train,y_test=np.load("./dog_cat.npy", 26 2 allow_pickle=True) 27 28TypeError: iteration over a 0-d array

該当のソースコード

python

1from PIL import Image 2import os,glob 3import numpy as np 4from PIL import ImageFile 5 6ImageFile.LOAD_TRUNCATED_IMAGES=True 7 8classes=["dog","cat"] 9num_classes=len(classes) 10image_size=64 11 12num_testsize=25 13 14x_train,y_train,x_test,y_test=[],[],[],[] 15 16#画像処理 17for index,label in enumerate(classes): 18 print(index,label) 19 if(label == "犬"): 20 photo_dir="photos_犬/" 21 else: 22 photo_dir="photos_猫/" 23 files=glob.glob(photo_dir+"/*.jpg") 24 print(files) 25 print(len(files)) 26 for i,file in enumerate(files): 27 #print(i,file) 28 image=Image.open(file) 29 image=image.convert("RGB") 30 image=image.resize((image_size,image_size)) 31 data=np.asarray(image) 32 if(i<num_testsize): 33 x_test.append(data) 34 y_test.append(index) 35 else: 36 for angle in range(-20,20,5): 37 img_r=image.rotate(angle) 38 data=np.asarray(img_r) 39 x_train.append(data) 40 y_train.append(index) 41 img_trains=img_r.transpose(Image.FLIP_LEFT_RIGHT) 42 data=np.asarray(img_trains) 43 x_train.append(data) 44 y_train.append(index) 45 46x_train=np.array(x_train) 47x_test=np.array(x_test) 48y_train=np.array(y_train) 49y_test=np.array(y_test) 50 51xy=(x_train,x_test,y_train,y_test) 52#xy = { 53#"X_train": x_train, 54#"X_test": x_test, 55#"y_train": y_train, 56#"y_test": y_test 57#} 58np.save("./dog_cat.npy",xy) 59 60x_train,x_test,y_train,y_test=np.load("./dog_cat.npy", 61 allow_pickle=True)

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

辞書型でエラーが発生しなくなると見つかりましたが読み込み方が分かりません。エラーが発生します。

補足

anaconda3-2023.09-0
macM1

tatsu99👍を押しています

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

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

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

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

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

id9m4i2l67

2024/02/16 04:23

私もそこまで詳しくないのですが、ndarrayをさらにndarrayで囲って保存できるんでしたっけ? すべての情報を1つのファイルにまとめたいというのが要望でしたら、お役に立てませんが、 ひとまず保存できて先に進みたいだけであれば、x_train~y_testをそれぞれ個別のnpyファイルに保存すればよろしいのではないでしょうか
guest

回答1

0

ベストアンサー

numpyで複数ndarrayを1つにまとめて保存したい場合は、savezメソッドが使えます。

公式のドキュメントに保存後のloadの使いかたなども出ています。

https://numpy.org/doc/stable/reference/generated/numpy.savez.html

投稿2024/02/16 04:59

TakaiY

総合スコア14411

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

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

miraimirai

2024/02/16 07:46

1年前の教材を復習しているのですが、その時のファイルではこのままのコードだったので変更がありました?
TakaiY

2024/02/16 08:08

どうでしょう。 その、1年前に使っていたnumpyのバージョンを調べて対応するドキュメントを見てみるとわかるかもしれません。
miraimirai

2024/02/16 08:58

調べてみましたが見つかりません。numpyのリリースノートは見たのですが…
TakaiY

2024/02/16 09:11

いずれにしても、現状のコードは現在のnumpyでは動きませんので、修正して対応するしかないでしょう。
miraimirai

2024/02/16 09:33

回答ありがとうございます。 回答を試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問