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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

917閲覧

'numpy.ndarray' object is not callable の回避方法

maroroid

総合スコア1

NumPy

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

Python 3.x

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

0グッド

0クリップ

投稿2022/11/17 08:15

前提

Pythonを用いて、ifによる条件分岐を変数で行った際に、
TypeError: 'numpy.ndarray' object is not callable
が出ました。
初学者につき何が間違っているのかわからないので教えていただきたいです。

実現したいこと

関数f(p,q)について、qがある範囲内の時のpの値の平均値を求めたいです。
そのため、
qのj番目の要素がある範囲内の数値であれば、pのj番目の数値をSに足す
これをqの要素の数だけ繰り返し、Sを当てはまった回数で割ることで平均を得る。
というコードを書けばよいと考えています。

さらに、この範囲を始めは5%~15%、次は15%~25%というように連続して計算したいので、
この範囲を変数で指定したいです。

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

Traceback (most recent call last): File "xxxxxx", line 61, in <module> if q(j)>=a and q(j)<=a+2*t: TypeError: 'numpy.ndarray' object is not callable

該当のソースコード

python

1import matplotlib.pyplot as plt 2import glob 3import re 4import os 5import argparse 6import numpy as np 7from scipy import interpolate 8 9 10#ccfファイルのリスト化 11file = glob.glob('data\BIS*.in') 12 13#datファイルからリストへ書き出し 14x_list=[] 15y_list=[] 16 17for n in file: 18 f=open(n,"rt") 19 x=[] 20 y=[] 21 for line in f: 22 data=line[:-1].split(" ") 23 x.append(float(data[0])) 24 y.append(float(data[1])) 25 x_list.append(x) 26 y_list.append(y) 27 28#spline 29def spline_bis(x,y,point): 30 f = interpolate.interp1d(x, y,kind="cubic") 31 X = np.linspace(x[0],x[-1],num=point,endpoint=True) 32 Y = f(X) 33 return X,Y 34 35bis_list=[] 36for n in range(len(file)): 37 p,q=spline_bis(x_list[n],y_list[n],1000) 38 bis=[] 39 t= (max(q)-min(q))/20 #5%の幅 40 a= t 41 for i in range(9): 42 S=0 43 K=0 44 for j in range(len(p)): 45 if q(j)>=a and q(j)<=a+2*t: 46 S+=p(j) 47 K+=1 48 bis.append(S/K) 49 a += 2*t 50 bis_list.append(bis)

試したこと

aやq(0)のtypeは<class 'numpy.float64'>でした。
a+2*tという書き方がまずいのかと思い、
if q(j)>=a
だけにしてみましたが結果は同じでした。

補足情報(FW/ツールのバージョンなど)

VScode python 3.10.4

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

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

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

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

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

melian

2022/11/17 08:33

おそらく、 if q[j]>=a and q[j]<=a+2*t:   S+=p[j] かな、と。
maroroid

2022/11/17 14:41

その通りでした。ありがとうございました。
guest

回答1

0

自己解決

melian様のおっしゃる通り,()を[]に直したら解決しました。

投稿2022/11/17 14:42

maroroid

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問