【问题标题】:How to add a row to np array in for loop python如何在for循环python中向np数组添加一行
【发布时间】:2020-04-04 03:02:51
【问题描述】:

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

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(二维数组)的值。

问题是:

  1. 我得到一个一维数组
  2. 前两个元素是在我创建数组时添加的,我不想包含它们。

【问题讨论】:

  • 你在最后一行的 np.array() 调用有两个括号。尝试删除一组。

标签: python arrays for-loop append np


【解决方案1】:

首先,如果您不需要动态扩展数组,我建议不要附加 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 维数组相同的结构。如果您使用 dict,代码将如下所示。

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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2018-06-13
      • 2020-03-20
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多