2017-06-03 8 views
0

あいまいですPyplotの真理値は、私はKNNの1D推定値を実装しようとしています

File "x", line 55, in nearest_n 
    if np.abs(x-n) < np.abs(x-nnb[nb]): 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

私はエラーがから来ている知っています配列の入力はplot()で行いますが、演算子>/==/<の関数でこれを避ける方法がわかりません

'data'は浮動小数点数を含む1D txtファイルに由来します。

私はベクトル化を使用してみました。その結果

nearest_n = np.vectorize(nearest_n) 

:ここ

line 50, in nearest_n 
    for n in data: 
TypeError: 'numpy.float64' object is not iterable 

は一例であり、のは言わせて:

data = [0.5,1.7,2.3,1.2,0.2,2.2] 
k = 2 

nearest_n(1.5)、その後につながるはず

nbb=[1.2,1.7] 
v = 0.5 

と2 /(6 * 0.5)= 2/3

機能を返すには、例えばneares_n(2.0,4、データ)のために実行され、あなたがあなたのxとしてnp.arange(-4, 8, .01)に渡してい0.0741586011463

+1

予想される出力を含めることができますか(手動で行う必要がある場合は、 。 :) – MSeifert

+0

出力は、3つの異なる確率密度プロット(k = 2,8,35)、s.th.配列[-4,8]からのすべての値は、確率[0,1]にマップされます。 –

+0

いいえ、私は 'nearest_n'の呼び出しの文字通りの結果を意味しました。たとえば、 'nearest_n(np.arange(-4.0,8.0、0.1)、2、np.array([1,2,3]))'戻り値は何ですか?値を多かれ少なかれランダムに選択し、必要に応じて適切な値を挿入します(参照実装がない場合は手作業で計算する方が簡単です)。 – MSeifert

答えて

0

を与えますこれは値の配列です。したがってx - nは、xと同じ長さの配列です。この場合は120要素です。これは、配列とスカラーの減算が要素ごとの減算を行うためです。 nnb[nb]と同じです。したがって、比較の結果、np.abs(x-n)の各要素がnp.abs(x-nnb[nb])の対応する要素より小さいかどうかによってブール値を持つ長さが120の配列があります。これを条件として直接使用することはできません(all()any()を使用するか、コードを再考するだけです)これらの値を単一のブール値にまとめる必要があります。

+0

こんにちは、私の答えをありがとう、私を見てください。それはちょうど私がpyplotが少し異なって動作することを期待していることです –

0
plt.figure() 
X = np.arange(-4.0,8.0,0.1) 
for k in [2,8,35]: 
    Y = [] 
    for n in X: 
     Y.append(nearest_n(n,k,train_data)) 
    plt.plot(X,Y,label=str(k)) 
plt.show() 

は問題ありません。私はpyplot.plotが私のためにこの正確なことを既にしていると思ったが、私はそれがないと思います...

+0

それは 'pyplot'の問題ではない、なぜ私はあなたがそれができると思いますか? 'nearest_n'を書いて' x'引数のスカラーを取るので、コードを書き直さずにベクトルを渡すことはできません。ここでは、ベクトルをループし、そのたびに関数にスカラーを渡します。 – spruceb

+0

私はpyplotがこれと同じようにベクトル入力を扱うと思っていましたが、間違っていました。 –

+0

問題の原因を理解しているとは思えないので、明確にしたいだけです。このエラーは 'pltに投げられませんでした。plotpl関数に入力したものではなく、 'pyplot'への入力が原因ではありませんでした。エラーは' nearest_n'でスローされ、その関数に渡された引数が原因でした。 – spruceb

関連する問題