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

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

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

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

Q&A

解決済

2回答

805閲覧

丸目誤差をうまく扱いたい

Tubasa1995

総合スコア83

Python

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

0グッド

0クリップ

投稿2020/08/06 05:13

下記のようにある階層のディレクトリに0.0002から0.0002刻みで100個のディレクトリがあり、各ディレクトリの'sets0_p.csv'などのファイルを読み込みたいです。
ただ、下記のコードを書いて試してみたのですが、写真のようなエラーとなります。
Decimalとかの丸目誤差とかをうまく扱えることができれば解決するとは思うのですが、どうすれば良いのかよくわかりません。
どなたかご教授くださいませんか。

それか、読み込めるのであれば、全然別の方法でもかまいません。

イメージ説明
イメージ説明

dt = dec.Decimal('0.0002') for i in range(100): pre = pd.read_csv('probe/'+str(dt+dt*i)+'/sets0_p.csv', header=0, names=('X', 'Y', 'Z', 'p')) refpre = pd.read_csv('reference_pre/'+str(dt+dt*i)+'/sets0_p.csv', header=0, names=('X', 'Y', 'Z', 'refpre')) refvel = pd.read_csv('reference_vel/'+str(dt+dt*i)+'/sets0_U.csv', header=0, names=('X', 'Y', 'Z', 'Ux', 'Uy', 'Uz'))
FileNotFoundError: [Errno 2] File b'probe/0.0010/sets0_p.csv' does not exist: b'probe/0.0010/sets0_p.csv'

ここで問題なのは、0.0010というディレクトリはなく、0.001というディレクトリしかないということです。

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

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

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

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

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

y_waiwai

2020/08/06 05:23

0.1 というディレクトリはあるのに、なんで0.0010なんでしょう。 ディレクトリ名にはどういう法則があるんでしょうか。 #0.1000 というディレクトリ名なら納得いきますが
Tubasa1995

2020/08/06 05:25

それはディレクトリの表示の問題です。 0.0002 0.0004 0.0006 0.0008 0.001 / / / 0.1というディレクトリが存在します。
Tubasa1995

2020/08/06 05:26

0.0002刻みで 0.0002~80という名前のディレクトリがあります。
Tubasa1995

2020/08/06 05:27

0.0008 0.001 / / 0.9998 0.1
y_waiwai

2020/08/06 05:27

ああ、計算の結果で0.0010ってのが出てくるってはなしでしたか
ikadzuchi

2020/08/06 12:32

「丸目誤差」ではなく、「丸め誤差」です。
guest

回答2

0

ベストアンサー

浮動小数点で計算するとそういうややこしいことになるので、整数でカウントし、ファイル名にする時点で、1/1000 すればどうでしょう

投稿2020/08/06 05:31

編集2020/08/06 05:33
y_waiwai

総合スコア87774

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

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

0

decimalを使っているようなので、浮動小数点計算による誤差は関係ないです。

おそらくエラーメッセージを全く見てないのだと思いますが、0.001というディレクトリをアクセスしないといけないのに0.0010をアクセスしようとしています。
ということで、そもそも誤差は全く関係ないです。

rstrip("0")で右端のゼロを削除しましょう。

投稿2020/08/06 05:56

otn

総合スコア84540

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問