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

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

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

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

Python

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

Q&A

解決済

1回答

2394閲覧

至急助けてください。Python for文を100回以上繰り返せない

Tubasa1995

総合スコア83

NumPy

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

Python

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

0グッド

1クリップ

投稿2020/08/16 23:14

編集2020/08/16 23:35

下記のコードを書いて実行すると
i=99まではうまくいくのですが
i=100以上ではなぜかうまくいきません。

とくにpre/probedata_nv_3dcylnd_prs_p'+str(i+1)の'C'は5305個の要素数があります。
リストにどんどんappendしていくので、
i=99mでは要素数は5305×99=52195のようになるのですが
i=100になったとたん、リスト内の要素数が100などの繰り返し処理の回数になります。
つまり要素数が100になっているのです。(本来は5305*1000にならないといけない)
全くいみがわからないです。誰か教えてくれませんか。

これはなぜですか?

lst = [] for i in range(99): pressure1 = pd.read_csv('pre/probedata_nv_3dcylnd_prs_p'+str(i+1), delim_whitespace=True, comment='#',names=['A', 'B', 'C']) pre1 = pressure1['C'] lst.append(pre1) array_lst = np.array(lst) pressure_lst = array_lst.reshape(252,5305).T np.savetxt('time_history_pressure.csv',pressure_lst,delimiter=',')
ValueError: cannot reshape array of size 200 into shape (252,5305)

これがためしにi=200でやってみた場合です。
なぜサイズが200になるのかわかりません。

ValueError: cannot reshape array of size 525195 into shape (252,5305)

これがi=99での場合です。このように要素数が足されています。

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

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

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

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

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

maisumakun

2020/08/16 23:16

「pre/probedata_nv_3dcylnd_prs_p100」のようなファイルは存在しますか?
Tubasa1995

2020/08/16 23:18

間違いなく書きのファイルは存在してます。 probedata_nv_3dcylnd_prs_p100 (preというディレクトリ内にあります)
Tubasa1995

2020/08/16 23:19

そもそももともとできていたのですが、 ほんお数時間前から、なぜかi=100までしかできなくなりました。
yymmt

2020/08/16 23:25

質問とエラーメッセージの対応が取れていないように思います。エラーを回避するだけなら pressure_lst = array_lst.reshape(-1,5305).T とすれば良いと思います。
Tubasa1995

2020/08/16 23:27

probedata_nv_3dcylnd_prs_p'+str(i+1)というファイルが200個程度あり、各ファイルに5000個以上の要素があります。それをリストにどんどんappendしているので、単純に5000*iという要素数にならないとおかしくないですか?
yymmt

2020/08/16 23:37

python標準のlistではappendすると要素数はappendした回数になります。すなわち5000*iではなくiです。その後numpyの配列にしているので、その時初めてshape=(i, 5000)という2次元配列になります。
Tubasa1995

2020/08/16 23:40

そうだったんですか。。 ただ、ためしにi=252でやりました。 最終的にはreshape(252,5602)にしたいのですが 下記のようなエラーがでます。 どういうことでしょうか? np.array(lst)をしても、中身の要素数は回数iなのですか? pressure_lst = array_lst.reshape(252,5602).T ValueError: cannot reshape array of size 252 into shape (252,5602) PS C:\Users\tomiyasu\Desktop\probe_analysis>
Tubasa1995

2020/08/16 23:42

あ、つまりnp.arrayのときに、i=100だとうまくいっていないんですね。
yymmt

2020/08/16 23:44

「pre/probedata_nv_3dcylnd_prs_p100」のファイルが壊れているということはないでしょうか?
guest

回答1

0

ベストアンサー

現象として何が起こっているのか説明します。
3つの要素を持つリスト(決め打ち[1,2,3])を10回appendしたのち、numpy配列にすると(10, 3)になります。

python

1lst = [] 2for i in range(10): 3 lst.append([1, 2, 3]) 4print(np.array(lst).shape) 5 6# 結果 7# (10, 3)

ここで、要素数が3でないリスト(例えば[1,2])が加わったとします。

python

1lst = [] 2for i in range(10): 3 lst.append([1, 2, 3]) 4lst.append([1,2]) 5print(np.array(lst).shape) 6 7# 結果 8# (11,)

したがって要素数が100を超えた値を指定した時点で、それまでの要素数とは異なる要素数を持つデータが追加された可能性があります。

投稿2020/08/16 23:54

yymmt

総合スコア1615

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

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

Tubasa1995

2020/08/16 23:58

つまり、どこかのファイルに要素数がことなるものがあった、という認識で正しいでしょうか? ちょうどファイルを調べたところ、1行だけ要素数が少ないものがありました。
yymmt

2020/08/17 00:01

要素数が同じになるように補完するか、そのデータはappendしないようにするか、何らかの処理する必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問