2017-05-24 7 views
-1

私はPythonで新しいです。私はそれを自分で学び、何が起こるかを理解するが、今、私は本当に立ち往生している。私の問題を理解するのを助けてください。実行した後私はコードを実行した後に "なぜ型が 'float型'の非intでシーケンスを掛けることができないのですか?

import matplotlib.pyplot as plt 
import math 

x = [-0.006,-0.005,-0.004,-0.003,-0.002,-0.001,0,0.001,0.002,0.003,0.004,0.005,0.00] 
y = [220*(1 - (0.85*math.exp(-math.pi**2/math.log(2)*(x*0.53*10**-9/759.5*10**-9)**2)))] 

plt.plot(x,y) 
plt.xlabel('optical path difference') 
plt.ylabel('coincidence counts in 3 min') 

plt.show() 

それは、それはエラーを返します:

TypeError: can't multiply sequence by non-int of type 'float' 

は私がフロートにリストxを掛けることができるように、私のコードを変更する必要はどうすればよいですか?

+1

、あなたはタイトルに正確なエラーメッセージを表示して、それらのほとんどを確認している可能性がこの問題のbazillionのバリエーションがあります。次回は、提案された関連の質問を見てください。 – ShadowRanger

答えて

0

リストに浮動小数点値を掛けることはできません。リストは整数に "乗算"することができますが、ここでは役に立ちません。

代わりにnumpyを使用できます。 numpy配列には、単一の数値または別のnumpy配列を掛けることができます。

[1,2,3] * 3       # [1, 2, 3, 1, 2, 3, 1, 2, 3] 
[1,2,3] * 3.3       # can't multiply sequence by non-int of type 'float' 
np.array([1,2,3]) * 3     # [3 6 9] 
np.array([1,2,3]) * np.array([1,2,3]) # [1 4 9] 

ここでの解決策は、まずのnumpy配列を使用することです。 yの角括弧も削除する必要があります。レコードの

import matplotlib.pyplot as plt 
import numpy as np 

x = [-0.006,-0.005,-0.004,-0.003,-0.002,-0.001,0,0.001,0.002,0.003,0.004,0.005,0.006] 
x = np.array(x) 
y = 220*(1 - (0.85*np.exp(-np.pi**2/np.log(2)*(x*0.53e-9/759.5e-9)**2))) 

plt.plot(x,y) 
plt.xlabel('optical path difference') 
plt.ylabel('coincidence counts in 3 min') 

plt.show() 

enter image description here

+0

私を助けてくれてありがとう – munirah

0

xは、Python listです。 x*0.53は非センシティブです(numpyタイプのシーケンス乗算は "何度も繰り返しシーケンス"を意味し、離散乗数で、シーケンスの最初の53%は使用できません)。

xnumpyの配列に変換することを意味しましたか?あるいは、各要素を個別に処理するか?

+0

xは-0.006から0.006までの値ですので、実行時に自動的にy式に代入したいと考えています。 – munirah

関連する問題