2016-12-02 13 views
0

これらの2つのセクションで、次のエラーメッセージが表示されます。ValueError:配列で配列要素を設定する

def Simpsons(a, b, n, f, x): 
    h=(b-a)/n 
    s = 0. 
    step = a + h 
    for i in range(1, int(n/2)): 
     s += 4*f(x) 
     #step += 2*h 

    step = a + 2 * h 
    for i in range(2, int(n/2 - 1)): 
     s += 2*f(x) 
     #step += 2 * h 

    area = (h/3) * (f(a) + f(b) + s) 
    return area 

for i in range(0, len(list_n)): 
    for j in range(0, len(Functions)): 
     x = np.linspace(a, b, list_n[i]) 
     error_simp[j, i] = Exact_intergrals[j] - Simpsons(0, 1,   list_n[i], Functions[j], x) 
print(error_simp) 

このメッセージを与える:

error_simp[j, i] = Exact_intergrals[j] - Simpsons(0, 1, list_n[i], Functions[j], x) 
ValueError: setting an array element with a sequence. 

これはなぜでしょうか?私が試したことはすべてそれを取り除かない。

+0

インデントを正確に再現するPythonコードを投稿するかどうかを確認してください。さもなければ、人々が問題を見つけようとしているコードに新しい問題を導入しています。 – khelwood

+0

side remark:nが偶数または奇数の場合、シンプソン(統合)で大文字小文字の区別をする必要があります。シンプソンルールは、最後のインターバルを別々に扱うことで、奇数のインターバルに拡張することができます(最後の3ポイントに放物線を当て、最後の2ポイントのみを統合します)。 –

+0

'error_simp'とは何ですか?形、dtype? RHSは何を生産していますか? – hpaulj

答えて

0

error_simp [j、i]に配列をロードしようとしていますが、これは浮動小数点数だけを含む可能性があります。ここ

は、このエラーを示す簡単な例である:

import numpy 
b = numpy.zeros(5) 
b[0] = numpy.zeros(5) - 1 

は、同じエラーが発生します。

Simpsonsのように見えます。関数は配列を返します。Exact_intergrals[j]には配列が含まれています。

error_simp = np.zeros((rows, cols, additional_dimension_size)) 

(別のオプションが明示的にコンストラクタでdtype=objectオプションを設定することですが、それははるかに遅いですし、お勧めしません):あなたがerror_simp行列で配列を保存する必要がある場合は

、1以上のディメンションを追加してみてください。 this onethis

0

あなたのシンプソンズ機能を配列が与えられたときに、同じサイズの配列を返します:

In [335]: Simpsons(0,1,10, lambda x:x**2, np.linspace(0,1,3)) 
Out[335]: array([ 0.03333333, 0.2  , 0.7  ]) 

あなたはどのようにerror_simpを示さない

に役立つかもしれないいくつかの同様の質問があります。初期化されます。 error_simp[j, i]=...を使用すると、そのエラーは、

np.zeros((n,m), float) 

などのように表示されます。

error_simpに入力する内容を指定する必要があります。 xがすべての要素で同じ場合、一致する3d配列を作成できます。 xの長さが異なる場合は、dtype=objectにする必要があります。しかし、私はこの使い方を初心者からは控えています。このような配列は、リストの栄光に輝く(または衰えた)リストのようなものです。このような配列でできることの非現実的な期待を持つことは簡単です。

=========

あなたはおそらく異なるサイズxを作成している

for i in range(0, len(list_n)): 
    for j in range(0, len(Functions)): 
     x = np.linspace(a, b, list_n[i]) 

でより慎重に探しています。 list_nは表示されませんが、おそらく[10,12,14,...]のようなもので、別のnに対してこの機能をテストしています。

関連する問題