やりたいこと
pythonでnpyファイルをnp.loadしたい.
環境
- MacOS
- QGIS Ipython
- バニラpython環境
- Google Colab
ファイルの内容
数値が格納された[21600*43200]のnpyファイル.
同サイズのnarrayをnp.stackで重ね,np.meanを使って生成したもの.
困っていること
以下のようなエラーがでる.
python
1 2d=np.load(file) 3Traceback (most recent call last): 4 File "/Applications/QGIS3.14.app/Contents/Frameworks/Python.framework/Versions/Current/lib/python3.7/code.py", line 90, in runcode 5 exec(code, self.locals) 6 File "<input>", line 1, in <module> 7 File "/Applications/QGIS3.14.app/Contents/MacOS/../Resources/python/numpy/lib/npyio.py", line 447, in load 8 pickle_kwargs=pickle_kwargs) 9 File "/Applications/QGIS3.14.app/Contents/MacOS/../Resources/python/numpy/lib/format.py", line 738, in read_array 10 array.shape = shape 11ValueError: cannot reshape array of size 536862720 into shape (21600,43200)
cannot reshape arrayについて調べたのですが,reshapeを実行する際に起きるエラーへの対処法は見つけられましたがnp.loadする際になぜ発生するのかがわかりません.
試したこと
- npファイルが破損しているのかと思い,再度npファイルを生成しsaveしなおした.
→変化なし.保存前のnpファイルは正常そうです.
- QGIS内のIpythonで実行していたため,別の環境でも試した.
→同様のエラーがおきた.
- 同じ作成法で生成した同サイズのnpyではエラーは発生していない.
考えている原因・知りたいこと
- 大きなファイルなのでメモリ不足?
- 含まれる値に問題がある?
なぜこのようなことが発生するのかご教示いただきたいです.
> npファイルが破損しているのかと思い,再度npファイルを生成しsaveしなおした.
「npファイルを生成」するコードも提示いただくと回答が付きやすくなるかと思います。
numpyのバージョンは何ですか?
以下のコードは走らせられますか?
import numpy as np
arr = np.zeros((21600,43200),np.uint8)
np.save("arr.npy",arr)
arr_loaded = np.load("arr.npy")
print(arr_loaded.shape)
うまく行った→「同サイズのnarrayをnp.stackで重ね,np.meanを使って生成したもの」の生成がうまく行っていない可能性。print(生成したもの.shape)で確認した方がいいかも?
※floatだと膨大なメモリがいるのでuint8で試しました。
うまく行かなかった→PythonとNumpyの何かがおかしい?
size 536862720 into shape (21600,43200)
なのでメッセージ上はデータとreshapeのサイズがあっていないことになります
https://deepage.net/features/numpy-reshape.html
>-1を使用すると、元の要素数に合わせて自動で適切な値が設定されます。
なので-1で一旦pythonが認識しているshapeに変換してみて、
どういうnpにるか確認してから、データを眺めなおしてみてはどうでしょうか。
numpyのバージョンは
```ここに言語を入力
>>> print(np.__version__)
1.17.2
```
です.
>以下のコードは走らせられますか?
問題なく動きました.
>どういうnpにるか確認してから、データを眺めなおしてみてはどうでしょうか。
ありがとうございます.reshapeを使ってデータを眺めても問題ありませんでした.
メモリ量が十分にあるWSで試したところ問題なく動いたのでやはりメモリ不足によるエラーなのかなぁ...と考えています.
イマイチ腑に落ちないのですが自己解決とさせてください.
たくさんお知恵をお貸しくださりありがとうございました.
メモリ不足だと違うエラーになる気がするんですよね。。とはいえデータをみんなで確認するわけにもいかないのでここまで、、というところですか。僕もモヤりますが悩んでも解決しないのでここで打ち止めですね。承知しました!お役に立てずすみません。
回答1件
あなたの回答
tips
プレビュー