【问题标题】:Convert nested for loops to list comprehension将嵌套的 for 循环转换为列表理解
【发布时间】:2021-05-09 16:53:21
【问题描述】:

我必须将嵌套的 for 循环转换为列表理解:

H = cvxopt.matrix(0.0, (rows, rows), tc='d')

for i in range(rows):
    for j in range(rows):
        H[i, j] = t[i] * t[j] * kf(X[i], X[j], param)

我试过这个:

H = [t[i] * t[j] * kf(X[i], X[j], param) for H[i, j] in H]

但这给了我一个错误i not defined。

【问题讨论】:

  • 我认为您不能使用列表推导来构建cvxopt.matrix
  • 你可以用H = [t[i] * t[j] * kf(X[i], X[j], param) for i in range(rows) for j in range(rows)] 建立一个列表,但它不会和你的for 循环做同样的事情。

标签: python list list-comprehension


【解决方案1】:

您不能完全根据列表推导构建矩阵,只能使用lists。那是因为 Python 没有内置的矩阵类型。

可以构建下一个最好的东西,listlists。例如

>>> [[i + 3 * j for i in range(N)] for j in range(N)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]

然后您可以使用cvxopt.matrix 构造函数转换为matrix

H = cvxopt.matrix([[i + 3 * j for i in range(N)] for j in range(N)])

在你的例子中,t 被定义在某处(这不包括在问题中),你可以这样做:

H = cvxopt.matrix([[t[i] * t[j] * kf(X[i], X[j], param) for i in range(rows)] for j in range(rows)])

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2021-02-03
    • 2021-09-02
    • 2020-03-29
    相关资源
    最近更新 更多