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

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

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

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

Q&A

解決済

2回答

1517閲覧

python 異なるコードなのに答えが同じになる 助けてください

Tubasa1995

総合スコア83

Python

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

0グッド

0クリップ

投稿2019/01/11 11:38

編集2019/01/11 12:48

下記の2つのコードを書きました.
計算の演算方法が違うにも関わらず
1つ目のコードの出力3points-test.csvの53行目以降と
2つ目のコードの出力5poins-test.csvの1行目以降は
同じ値が出力されます.

いったい何がいけないのか全く分かりません.
このコードの計算はなぜ同じ出力結果を出すのですか.

入力のhistory_7702-15402with_Header.csvは
7701行×7201列のcsvファイルなのですが,
答えが同じという事は,きっとコードの演算が違うのだと思います.

import numpy as np import pandas as pd import decimal as dec from scipy import signal data = pd.read_csv("history_7702-15402with_Header.csv").values.tolist() lst = [] filterrange = dec.Decimal(2) deltax = dec.Decimal(1) deltay = dec.Decimal(1) a = filterrange*filterrange/24 for j in range(100): for i in range(7597): a1 = dec.Decimal(data[i+51][j]) a2 = dec.Decimal(data[i+52][j]) a3 = dec.Decimal(data[i+53][j]) a4 = dec.Decimal(data[i+103][j]) a6 = dec.Decimal(data[i+1][j]) x = a2 + a*(((a3 - 2*a2 + a1)/(deltax*deltax)) + ((a4 - 2*a2 +a6)/(deltay*deltay))) lst.append(x) #np.savetxt('filtered4_15403-23103_history.csv', lst, delimiter=',') array_lst = np.array(lst) reshape = array_lst.reshape(100,7597) np.savetxt('3points-test.csv', reshape, delimiter=',') min_list = [] minimum = np.min(reshape,axis=0) min_list.append(minimum) np.savetxt('3points-testmin.csv', min_list, delimiter=',')
import numpy as np import pandas as pd import decimal as dec data = pd.read_csv("history_7702-15402with_Header.csv").values.tolist() print(data[0][0]) print(data[1][0]) print(data[1][1]) lst = [] filterrange = dec.Decimal(2) deltax = dec.Decimal(1) deltay = dec.Decimal(1) a = filterrange*filterrange/dec.Decimal(24) b = filterrange*filterrange*filterrange*filterrange/dec.Decimal(1152) dcccc = dec.Decimal(12) for j in range(50): for i in range(7493): a1 = dec.Decimal(data[i+102][j]) a2 = dec.Decimal(data[i+103][j]) a3 = dec.Decimal(data[i+104][j]) a4 = dec.Decimal(data[i+105][j]) a5 = dec.Decimal(data[i+106][j]) a6 = dec.Decimal(data[i+2][j]) a7 = dec.Decimal(data[i+53][j]) a8 = dec.Decimal(data[i+155][j]) a9 = dec.Decimal(data[i+206][j]) x = a3 + a*((-a5 + 16*a4 - 60*a3 + 16*a2 - a1 - a9 + 16*a8 + 16*a7 - a6)/(dcccc*deltax*deltax)) + b*((a5 - 4*a4 + 12*a3 - 4*a2 + a1 + a6 -4*a7 -4*a8 + a9)/(deltay*deltay*deltay*deltay)) lst.append(x) #np.savetxt('7702-15402_5point2derta.csv', list, delimiter=',') array_lst = np.array(lst) reshape = array_lst.reshape(50,7493) np.savetxt('5poins-test.csv', reshape, delimiter=',') min_list = [] minimum = np.min(reshape,axis=0) min_list.append(minimum) np.savetxt('5points-testmin.csv', min_list, delimiter=',')

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

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

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

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

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

m.ts10806

2019/01/11 11:45

何度か言ったと思いますが、Python本体の回答は無理なので回答依頼は別の人にだしてください。
guest

回答2

0

7495+206=7701 で、インデックスが配列の範囲を超えていますね。7701行あるという事は、配列の範囲は0〜7700です。
式が違っても、例えば20-7=10+3=13ですから、「式が違うのに演算結果が同じ」事をもって何か間違っているとは言えません。まずは、その「おかしい」と思っているデータを自分で計算して、思い違いでない事を確認して下さい。
そうすると、「実際にはこれこれの値で、演算結果はこうなるはずなのに、この様な結果が出るのでおかしい」という具体的な説明ができます。回答を求めるのはその後です。

投稿2019/01/11 12:25

Q71

総合スコア995

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

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

0

ベストアンサー

きっとそういうデータだという事ではないでしょうか?

最初の式を計算可能な部分を計算すると、

x = (a4 + 2*a3 + a2 + a8 + a7)/6

次の式は、

x = (a3 + 2*a2 + a1 + a4 + a6)/6

ですね。なんか似た感じ。見てる箇所が違いますが、意味のあるデータと思いますので、そのデータが何かが、問題と思います。

投稿2019/01/11 14:27

pepperleaf

総合スコア6383

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問