2016-10-07 3 views
1

このプログラムを実行すると、「TypeError:長さ1の配列のみをPythonスカラーに変換できます。 x1変数が割り当てられている9行目に移動します。"length-1配列のみをPythonスカラーに変換できます" - 浮動小数点変換機能付きエラー

私はこの文脈で意味するものはここでは無知です。以前の割り当てのために非常によく似たコードで作業しましたが、すべて正常に機能しました。私は、関数の引数としてベクトルを取り込み、すべての値を同時に計算しました。

注:フローティングを削除した後、正常に動作しているように見えますが、理由はわかりません。誰でも説明できますか? (を浮かぶよう)

import matplotlib.pyplot as plt 
import numpy as np 
g = 9.78 
p = 1000 
h = 50 
s = 7.9 * 10**-2 

def water_wave_speed(l): 
    x1 = float(g * l/(2 * np.pi)) 
    x2 = 1 + s * float((4 * np.pi**2)/(p * g * l**2)) 
    x3 = float((2 * np.pi * h)/l) 
    c = np.sqrt(x1 * x2 * np.tanh(x3)) 
    return c 

l_values = np.linspace(0.001, 0.1, 10) 
c_values = water_wave_speed(l_values) 
plt.plot(l_values, c_values) 
plt.show() 
+1

'float'の代わりに' np.float'を使います。それは役に立ちますか? –

+0

@AndrasDeak残念ながら..同じエラーが発生していません。 – SudokuNinja

+2

@AndrasDeak 'np.float == float' –

答えて

4

ドロップそれらfloat通話のすべてと、あなたのコードが動作するはずです。 numpy配列を単一の浮動小数点値に変換することを強制しようとしていますが、これは動作しません。

+0

良い点ですが、私はこれがコメントでなければならないと考えています。 –

+0

私は参照してください。最後の部分についてもう少し詳しく説明できますか?私はfloat()に渡された引数がこの場合配列である方法を理解していません。私は、Pythonでこのような関数呼び出しを行ったとき、配列の単一の値を通り、シーンの後ろに1つずつ計算すると思いました。 – SudokuNinja

+1

あなたの質問のコメントに記載されているように、計算には 'np.pi'があり、これは結果を浮動小数点として保持し、配列の要素は浮動小数点として返されます。期待どおり、配列の各項目に対して関数呼び出しが実行されません。配列を浮動小数点数に変換しようとします。 –

関連する問題