[英]Value error: The truth value of an array with more than one element is ambiguous
[英]Pyplot truth value of an array with more than one element is ambiguous
我正在嘗試實施knn一維估算:
# nearest neighbors estimate
def nearest_n(x, k, data):
# Order dataset
#data = np.sort(data, kind='mergesort')
nnb = []
# iterate over all data and get k nearest neighbours around x
for n in data:
if nnb.__len__()<k:
nnb.append(n)
else:
for nb in np.arange(0,k):
if np.abs(x-n) < np.abs(x-nnb[nb]):
nnb[nb] = n
break
nnb = np.array(nnb)
# get volume(distance) v of k nearest neighbours around x
v = nnb.max() - nnb.min()
v = k/(data.__len__()*v)
return v
interval = np.arange(-4.0, 8.0, 0.1)
plt.figure()
for k in (2,8,35):
plt.plot(interval, nearest_n(interval, k,train_data), label=str(o))
plt.legend()
plt.show()
哪個拋出:
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()中的數組輸入,但是我不確定如何在具有運算符> / == / <的函數中避免這種情況
“數據”來自包含浮點數的一維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
最接近的(1.5)應該導致
nbb=[1.2,1.7]
v = 0.5
並返回2 /(6 * 0.5)= 2/3
該函數例如運行neares_n(2.0,4,data)並給出0.0741586011463
您正在傳遞np.arange(-4, 8, .01)
作為x
,它是一個值數組。 因此x - n
是與x
長度相同的數組,在這種情況下為120個元素,因為數組和標量的減法是逐元素的減法。 與nnb[nb]
相同。 因此,比較的結果是一個具有布爾值的120個長度的數組,具體取決於np.abs(xn)
每個元素是否小於np.abs(x-nnb[nb])
的相應元素。 這不能直接用作條件,您需要將這些值合並為單個布爾值(使用all()
, any()
或只是重新考慮代碼)。
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已經可以為我做這件事了,但是我想它不會...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.