如何在for循环python中向np数组添加行

问题描述 投票:0回答:2

在阅读了类似问题的答案后,这是我的代码:

check = np.empty((1,2), int)
for i in range(1,20):

   clf = KNeighborsClassifier(n_neighbors= i) 
   clf.fit(X_train, y_train)
   print("Test set accuracy for k = ", i , "is: " , clf.score(X_test, y_test)) 
   check = np.append(check, np.array ([[i ,clf.score(X_test, y_test)]]) )

我想使用这些值获得19×2(2D数组)。

问题是:

  1. 我正在获得一维数组
  2. 创建数组时添加了前两个元素,但我不想包含它们。
python arrays for-loop append np
2个回答
0
投票

如果axisappend参数为None,则这些值将被展平并添加到您的数组中。尝试:

   check = np.append(check, [[i ,clf.score(X_test, y_test)]], axis=0)

0
投票

首先,如果您不需要动态缩放数组,建议不要添加numpy。相反,因为您知道所需的大小数组,所以我建议您初始化该大小的numpy数组,然后在遍历循环时按索引设置值。

check = np.empty((19, 2), int)
for i in range(1, 20):
   clf = KNeighborsClassifier(n_neighbors=i) 
   clf.fit(X_train, y_train)
   print("Test set accuracy for k = ", i , "is: " , clf.score(X_test, y_test)) 
   check[i, 0] = i
   check[i, 1] = clf.score(X_test, y_test)

如果您使用此检查数组仅查看不同数量的邻居的结果,则我建议使用dict。 dict将使导航结果更加容易,并且具有与Nx2维数组相同的结构。如果使用字典,则代码如下所示。

check = {}
for i in range(1, 20):
   clf = KNeighborsClassifier(n_neighbors=i) 
   clf.fit(X_train, y_train)
   print("Test set accuracy for k = ", i , "is: " , clf.score(X_test, y_test)) 
   check[i] = clf.score(X_test, y_test)

所以现在,您将邻居的数量表示为dict的键,而值是该模型的分数。因此,check[14]的值将是具有14个邻居的模型的得分。这也使您能够调用check.keys()来查看已经尝试过的值。因此,如果您只想尝试1个,3个,5个和10个邻居,这就像将代码更改为

一样简单。
check = {}
for i in [1, 3, 5, 10]:
   clf = KNeighborsClassifier(n_neighbors=i) 
   clf.fit(X_train, y_train)
   print("Test set accuracy for k = ", i , "is: " , clf.score(X_test, y_test)) 
   check[i] = clf.score(X_test, y_test)
© www.soinside.com 2019 - 2024. All rights reserved.