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

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

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

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2574閲覧

npzから、pngに直したい次第です。(編集済み)

Deep_passion

総合スコア47

NumPy

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/20 00:11

編集2021/12/20 00:59

前提・実現したいこと

npzから、pngに直したいと考えております。
ですが、エラーがでてしまいました。
どのようにしたら、pngになおせるのか、わかりかねている次第です。

こちらの通りに実践しました。

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

AttributeError Traceback (most recent call last) <ipython-input-27-208dfd64eac4> in <module>() 3 # f = np.asarray(f) 4 # f = Image.fromarray(f.astype('uint8')) ----> 5 f = Image.fromarray(f) 6 7 /usr/local/lib/python3.7/dist-packages/PIL/Image.py in fromarray(obj, mode) 2702 .. versionadded:: 1.1.6 2703 """ -> 2704 arr = obj.__array_interface__ 2705 shape = arr["shape"] 2706 ndim = len(shape) AttributeError: 'str' object has no attribute '__array_interface__'

該当のソースコード

for idx, f in enumerate(A): from PIL import Image # f = np.asarray(f) # f = Image.fromarray(f.astype('uint8')) f=np.load(f) f = Image.fromarray(f.astype(np.uint8)) im.save(f"/content/drive/MyDrive/神様/sartorius-inserted/train_sample_npy_to_pnp/{f[-16:-4]}.jpeg")

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

Python3 (3.7.4)
macbookpro 16

1,

np.loadを追加後

1--------------------------------------------------------------------------- 2AttributeError Traceback (most recent call last) 3<ipython-input-37-df6ebf7b8628> in <module>() 4 5 # f = Image.fromarray(f.astype('uint8')) 5 6 f=np.load(f) 6----> 7 f = Image.fromarray(f) 7 8 print(f) 8 9/usr/local/lib/python3.7/dist-packages/PIL/Image.py in fromarray(obj, mode) 10 2702 .. versionadded:: 1.1.6 11 2703 """ 12-> 2704 arr = obj.__array_interface__ 13 2705 shape = arr["shape"] 14 2706 ndim = len(shape) 15 16AttributeError: 'NpzFile' object has no attribute '__array_interface__' 17

2,
rgbで変化なしです。

3,

こちらに複数のやりかたってかいてあるので、その通りにやっています。

イメージ説明

4,melianさんへの返信
イメージ説明

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

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

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

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

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

Deep_passion

2021/12/20 00:36

jbpb0さん、ご返信ありがとうございます。こちらでも、おこなってみたのですが、このようなエラーが登場してしまいました。 上記です。
melian

2021/12/20 00:56

以前の質問で PNG を pickle 化して保存する、という様な事をされていたかと思いますが、もしかして読み込もうとしている npz ファイルの中身は pickle ですか?
melian

2021/12/20 01:05

はい、了解です。npz ファイルをどうやって作成したのかが判ればエラーの原因が分かるかもしれません。
Deep_passion

2021/12/20 01:11

for idx, f in enumerate(A): from PIL import Image # f = np.asarray(f) # f = Image.fromarray(f.astype('uint8')) ff = f[-16:-4] f=np.load(f) print(f[f'{ff}']) https://note.nkmk.me/python-numpy-load-save-savez-npy-npz/ このような感じで行った見たのですが、ヒントになりますでしょうか、エラーでしたが。笑。
Deep_passion

2021/12/20 01:12

<ipython-input-49-94211bc3e20d> in <module>() 6 ff = f[-16:-4] 7 f=np.load(f) ----> 8 print(f[f'{ff}']) 9 10 # print(f.dtype) /usr/local/lib/python3.7/dist-packages/numpy/lib/npyio.py in __getitem__(self, key) 257 return self.zip.read(key) 258 else: --> 259 raise KeyError("%s is not a file in the archive" % key) 260 261 KeyError: '0140b3c8f445 is not a file in the archive'
Deep_passion

2021/12/20 01:14

<class 'numpy.lib.npyio.NpzFile'> <class 'numpy.lib.npyio.NpzFile'> <class 'numpy.lib.npyio.NpzFile'>
melian

2021/12/20 01:18

なるほど、複数のファイルを束ねて一つの npz にしたのですね。
jbpb0

2021/12/20 01:35 編集

print(type(f)) を実行したら、「f」がnumpy配列なら「<class 'numpy.ndarray'>」と表示されますが、 > <class 'numpy.lib.npyio.NpzFile'> だから違うのでダメです f=np.load(f) の後に、「f」から中身(numpy配列)を取り出さないといけません print(type(f)) の代わりに、 print(f.files) を追加して実行してみてください そうすれば、「f」の中身の名前が表示されますので、その名前を使って取り出します たとえば ['arr_0', 'arr_1'] と表示された場合は、下記で中身が取り出せます f['arr_0'] f['arr_1'] これはnumpy配列なので、「Image.fromarray」に渡せます 【追記】 質問者さんが参考にした https://note.nkmk.me/python-numpy-load-save-savez-npy-npz/ にも、下記のように同じ事が書いてありました 「格納されたndarrayを取得するには、各ndarrayの名前を[]で指定する必要がある。各ndarrayの名前はfiles属性で確認できる。」
jbpb0

2021/12/20 04:07

> https://www.kaggle.com/dschettler8845/open-npz このようにしてでございます。 のコードでも、 npz_test = np.load("../input/sartorius-segmentation-train-mask-dataset-npz/0030fd0e6378.npz")["arr_0"] と、「np.load」の結果に「["arr_0"]」を付けて、中身を取り出してますよね
Deep_passion

2021/12/20 05:28

そんなやり方も存在したのですね。ありがとうございます。
jbpb0

2021/12/20 05:41

npzファイルの中身が一つだけならそれでもいいですが、複数あるなら np.load("*.npz")["arr_0"] np.load("*.npz")["arr_1"] と何回も「np.load」を実行するのは無駄なので、 z=np.load("*.npz") z["arr_0"] z["arr_1"] のように「np.load」の結果を変数に格納してから、その変数から一つずつ取り出す方がいいと思います
guest

回答1

0

自己解決

from PIL import Image for idx, f in enumerate(A): ori=f f=np.load(f) # print(f.files) # arr_0 f=f['arr_0'] f = Image.fromarray(f) # f.save(f"/content/drive/MyDrive/神様/sartorius-inserted/train_sample_npy_to_pnp/{f[-16:-4]}.png" ) f.save(f"/content/drive/MyDrive/神様/sartorius-inserted/train_sample_npy_to_pnp/{ori[-16:-4]}.png" )

melianさん、jbpb0さん、本当にありがとうございます。
とけました。
感謝しかないです。(北島康介)

投稿2021/12/20 02:33

Deep_passion

総合スコア47

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問