前提・実現したいこと
pythonの「rot90」を用いて、npz形式のデータを回転しようとしました。
結果、3次元の形で保存されていました。
回転後、2次元のまま保存するためにはどのようにすると良いのでしょうか??
ご教示お願いいたしますm(__)m
発生している問題・エラーメッセージ
TypeError Traceback (most recent call last) <ipython-input-31-122c26306328> in <module> 1 %matplotlib inline 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 path="./output/" 6 data=np.load(path+"0288.npz") ----> 7 plt.imshow(data['arr_0'][100]) (略) TypeError: Invalid shape (56, 56, 1) for image data
上記のように保存されたnpzデータを表示させようとしたところ、望んでいた形状である「shape (56, 56)」ではない、3次元のデータになっていました。
次のコードがその回転させる際に用いたコードです。
該当のソースコード
python
1#水増しデータの作成(90度回転) 2path = './output' 3for i, file in enumerate(files): #files 4 npz = np.load(file, allow_pickle = True)['arr_0'] 5 npz = np.rot90(npz) 6 np.savez('./{}/{:04}.npz'.format(path,wmax+i), npz) #wmax
↑こちらがnpzファイルを回転させる際に用いたコードです。
コードの詳細ですが、、、(念のため、補足的に記述します)
files : これは回転の対象となる元のデータファイルです。
000.npz 001.npz ,,, 287.npz が中身となっております。
wmax : wmax=288です。
例えば、000.npzを90度回転させたものを0288.npzと名前をつけて保存するという流れです。
試したこと
元のデータは「shape(56, 56)」であったため、表示させることができました。
なので、shape(56, 56, 1)の次元を1つ削除しようと思い、表示させる時に以下を追記しました。しかし、
python
1data=np.load(path+"0288.npz") 2data=np.squeeze(data, -1) # 次元削除を試みた 3plt.imshow(data['arr_0'][100])
AttributeError: 'NpzFile' object has no attribute 'squeeze'
となり、詰んでしまいました。
うまく回転しているかどうか、表示させて見ることもできない状態です。
補足情報
・実行環境
jupyterLab、ターミナルで表示を実行しましたが、両者同様のエラーでした。(発生している問題・エラーメッセージ)
しかし、気になっていることがひとつあります。
同様の回転コードではないのですが、以前に「rot90」を用いて作成した回転データでは、表示する際に今回のようなエラーは出ていませんでした(同じようなnpz形式の元データで、回転が成功した表示を見ることもできました)。
回答1件
あなたの回答
tips
プレビュー