用列表理解替换 for 循环

Replacing for loop with list comprehension

问题: 我想知道是否可以用列表理解替换这个 for 循环。努力学习地道的 Python.

声明:

  1. 取 ​​Xc
  2. 的第 0 行
  3. 乘以相应的元素(5 列有 5 个数字)
  4. 将这 5 个数字相加
  5. y[0]
  6. 中减去它
  7. 将其平方为最终结果
  8. Xc 的所有行和 y[=36 的所有列重复=]
  9. 求第5步结果最小的c的索引
    import numpy as np
    
    X = np.array([[66, 5, 15, 2, 500], 
                  [21, 3, 50, 1, 100], 
                  [120, 15, 5, 2, 1200]])
    y = np.array([250000, 60000, 525000])
    
    c = np.array([[3000, 200 , -50, 5000, 100], 
                  [2000, -250, -100, 150, 250], 
                  [3000, -100, -150, 0, 150]])   
    
    def find_best(X, y, c):
        smallest_error = np.Inf
        best_index = -1
        idx = 0
        sq_error_list = []
        for coeff in c:
            sq_error = sum((y - (X @ c[idx]))**2)
            sq_error_list.append(sq_error)
            idx += 1
        best_index = sq_error_list.index(min(sq_error_list))
        print("the best set is set %d" % best_index)
    
    find_best(X, y, c)

你可以用这个解决

np.argmin(np.sum((y[:,None]-X @ c.T)**2,axis=0))