【发布时间】:2020-11-20 13:11:51
【问题描述】:
我通过 Julia 使用CVXPY,这是一种使用列优先顺序将多维数组存储在内存中的语言。但是 CVXPY 是用 Python 编写的,并且接受 Numpy 样式数组(默认为行优先)用作常量。
我想知道我是否应该关心订购,例如使用矩阵A,翻译 Python 代码时如下:
import cvxpy as cp
import numpy as np
m = 30
n = 20
A = np.random.randn(m, n)
b = np.random.randn(m)
# Construct the problem.
x = cp.Variable(n)
objective = cp.Minimize(cp.sum_squares(A*x - b))
constraints = [0 <= x, x <= 1]
prob = cp.Problem(objective, constraints)
致朱莉娅:
using Random, PyCall
cp = pyimport("cvxpy")
m = 30
n = 20
A = randn(m, n)
b = randn(m)
# Construct the problem.
x = cp.Variable(n)
objective = cp.Minimize(cp.sum_squares(cp.matmul(A,x) - b))
constraints = [0 <= x, x <= 1]
prob = cp.Problem(objective, constraints)
【问题讨论】:
-
看起来像一个有效的问题,但是 cvxpy 的实际应用和它的求解器并不密集,因此很多事情都发生了变化,因为稀疏矩阵不再基于 numpy 并且需要复制肯定(我想),因为事情变得更加复杂:不仅是 col-major 与 row-major 了。另一句话:我猜你可能因复制(或包装期间发生的任何事情)而丢失的一切都由求解器时间支配。有趣的事实:可能每个求解器都会再次将你的输入复制并重新排序为它自己的内部矩阵格式(请参阅 cvxopt、ecos、...)。