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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

221閲覧

type errorを解決したい.

ktfs

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2017/12/10 06:45

編集2017/12/10 08:10

###前提・実現したいこと
pythonで各質量ごとに変化する2次元の関数を積分し,書き出すシステムを作っています。
書き出す機能を実装中に以下のエラーメッセージが発生しました。

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

TypeError

1<ipython-input-15-08f6886babba> in <module>() 2 7 file.write( str(10**logm[i]) ) 3 8 file.write( '\t' ) 4 9 file.write( str(sigmath(x)) )<------(エラー) 5 10 file.write( '\t' ) 6 11 file.write( str(sigmaga(x)) ) 7<ipython-input-14-b88dac1df230> in sigmath(x) 8 1 def sigmath(x): 9 2 return integrate.simps(f(x,y), x)<----------(エラー) 10 3 def sigmaga(x): 11 4 return integrate.simps(g(x,y), x) 12 5 def sigmask(x): 13TypeError: '_io.TextIOWrapper' object is not callable​

###該当コード

python

1 2# In[1]: 3 4 5# -- coding: utf-8 -- 6import numpy as np 7from scipy import signal, integrate,interpolate 8 9 10# In[2]: 11 12 13vofk = np.loadtxt('myset_matterpower.dat', usecols=(0)) 14vofmp = np.loadtxt('myset_matterpower.dat', usecols=(1)) 15x = np.log10(vofk) # vofkをxに格納 16y = np.log10(vofmp) # vofmpをyに格納 17 18 19# In[3]: 20 21 22# サンプルデータ作成 23xnew = np.linspace(min(x),max(x),num=10*len(x)+123) 24tt = xnew 25#3spline 26f0 = interpolate.InterpolatedUnivariateSpline(x, y,k=3) 27y0 = f0(tt) 28 29 30# In[4]: 31 32 33x=10.0**tt # vofkを更新 34y=10.0**y0# vofmpを更新 35f = open('cdm_spline.dat','w') 36f.write('#vofk \t vofmp\n') 37for i in range(len(x)): 38 f.write( str(x[i]) ) 39 f.write( '\t' ) 40 f.write( str(y[i]) ) 41 f.write( '\n' ) 42 43f.close() 44# x=10.0**tt # vofkを更新 45# y=10.0**y0# vofmpを更新 46 47 48# In[5]: 49 50 51def rho(z): 52 h = 0.6780 53 ob0 = 0.02225#h2 54 ocdm0 = 0.1198#h2 55 rho0 = 2.77536627e11 56 return rho0 * (ob0 + ocdm0) * ((1.0 + z) ** 3.0) 57def heaviside(x): 58 return 0.5 * (np.sign(x) + 1) 59 60 61# In[6]: 62 63 64# 半径 65def rth(m): 66 return (m * 3.0 / (4.0 * np.pi * rho(z))) ** (1.0 / 3.0) 67def rga(m): 68 return ((2.0 * np.pi) ** (-1.0 / 2.0)) * ((m / (np.pi * rho(z))) ** (1.0 / 3.0)) 69def rsk(m): 70 return (m / (6.0 * (np.pi ** 2.0) * rho(z))) ** (1.0 / 3.0) 71 72 73# In[7]: 74 75 76# 窓関数rth(m) 77def wth(x): 78 return (3.0 / ( rth(m)* x) ** 3.0) * (np.sin(rth(m) * x) - rth(m) * x * np.cos(rth(m) * x)) 79def wga(x): 80 return np.e ** (((-(rga(m) * x) ** 2.0)) / 2.0) 81def wsk(x): 82 return heaviside(1.0 - (rsk(m) * x)) 83 84 85# In[8]: 86 87 88# 被積分関数 89def f(x,y): 90 return (y / (2 * np.pi ** 2)) * (wth(x) ** 2) * x ** 2 91def g(x,y): 92 return (y / (2 * np.pi ** 2)) * (wga(x) ** 2) * x ** 2 93def h(x,y): 94 return (y / (2 * np.pi ** 2)) * (wsk(x) ** 2) * x ** 2 95 96 97# In[9]: 98 99 100def sigmath(x): 101 return integrate.simps(f(x,y), x) 102def sigmaga(x): 103 return integrate.simps(g(x,y), x) 104def sigmask(x): 105 return integrate.simps(h(x,y), x) 106 107 108# In[10]: 109 110 111logm = np.linspace(0, 15, num=10000) 112z = 0.0 113file = open('cdm_variance.dat', 'w') 114file.write('#vofm \t vofsigmath \t vofsigmaga \t vofsigmask\n') 115for i in range(len(logm)): 116 m = 10 ** logm[i] 117 file.write(str(10 ** logm[i])) 118 file.write('\t') 119 file.write(str(sigmath(x))) 120 file.write('\t') 121 file.write(str(sigmaga(x))) 122 file.write('\t') 123 file.write(str(sigmask(x))) 124 file.write('\n') 125 126file.close() 127

###試したこと
9で定義せずに,10のループ内で直接積分を質量事に行った.
###補足情報(言語/FW/ツール等のバージョンなど)
anaconda3,pycharm,jupyter

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

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

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

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

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

LouiS0616

2017/12/10 08:07

In[9]からIn[13]が抜けていますが、その間にファイル処理など行っていませんか?
ktfs

2017/12/10 08:12

jupyterの更新忘れです.In番号更新しました.
guest

回答1

0

ベストアンサー

[8]と[14]の間でfでファイルを開いていませんか?


fのような上書きされそうな関数名を使いたいのであればスコープをうまく使うとバグりにくくなります。

python

1def sigmath(x): 2 def f(x,y): 3 return (y / (2 * np.pi ** 2)) * (wth(x) ** 2) * x ** 2 4 return integrate.simps(f(x,y), x)

投稿2017/12/10 08:08

編集2017/12/10 11:20
mkgrei

総合スコア8560

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

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

ktfs

2017/12/10 08:13

jupyterの更新忘れです.In番号更新しました.
mkgrei

2017/12/10 08:49

sigmathのreturnの前に print(type(f)) を追加した場合、何が出力されますか?
ktfs

2017/12/10 08:55 編集

<class 'function'>が10000行出ました.
mkgrei

2017/12/10 08:56

TypeErrorは依然として出ていますか?
ktfs

2017/12/10 09:01

消えました.
ktfs

2017/12/10 09:04

print(type(f))を消しても動きました.
mkgrei

2017/12/10 09:07

大量の出力を誘発して、失礼しました。 結局問題は他のファイルを開いてf関数を上書きしてしまったことにありました。 コード自体にはバグはありませんが、特定のセルの再実行を挟むとエラーが起こりやすい状況にあります。 fはファイルを開くときに無意識に使ってしまったりするので、関数名を他のものにするか、sigmath関数の中に定義すると事故は減るでしょう。
ktfs

2017/12/10 09:07

一体全体コードの何がおかしかったのでしょうか.
ktfs

2017/12/10 09:09

関数fとファイルfがかぶってしまったということでしょうか
ktfs

2017/12/10 09:11

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問