#julia #cvxpy #pycall
#джулия #cvxpy #pycall
Вопрос:
Я использую CVXPY
through Julia, язык, в котором многомерные массивы хранятся в памяти в порядке следования столбцов. Однако CVXPY
он написан на Python и принимает Numpy
массивы стилей (которые по умолчанию являются основными строками) для использования в качестве констант.
Я хочу знать, должен ли я заботиться о порядке, например, с помощью matrix 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)
Комментарии:
1. Похоже, это правильный вопрос, но imho реальные приложения cvxpy и его решатели не являются плотными, и поэтому многое меняется, поскольку разреженные матрицы больше не основаны на numpy, и есть необходимость в копировании наверняка (я полагаю), поскольку все становится намного сложнее: не толькоcol-major против row-major больше. Еще одно замечание: я предполагаю, что все, что вы можете потерять из-за копирования (или что бы ни происходило во время обертки), зависит от времени решателя. Забавный факт: вероятно, каждый решатель снова скопирует и изменит порядок ваших входных данных в своем собственном внутреннем матричном формате (см. cvxopt, ecos, …).
Ответ №1:
Я видел, как именно это было сделано, и не видел никакой специальной обработки от want, которую я помню. Так что нет, это не вызывает никаких проблем