用列表理解替换 for 循环
Replacing for loop with list comprehension
问题: 我想知道是否可以用列表理解替换这个 for 循环。努力学习地道的 Python.
声明:
- 取 X 和 c
的第 0 行
- 乘以相应的元素(5 列有 5 个数字)
- 将这 5 个数字相加
- 从 y[0]
中减去它
- 将其平方为最终结果
- 对 X、c 的所有行和 y[=36 的所有列重复=]
- 求第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))
问题: 我想知道是否可以用列表理解替换这个 for 循环。努力学习地道的 Python.
声明:
- 取 X 和 c 的第 0 行
- 乘以相应的元素(5 列有 5 个数字)
- 将这 5 个数字相加
- 从 y[0] 中减去它
- 将其平方为最终结果
- 对 X、c 的所有行和 y[=36 的所有列重复=]
- 求第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))