Влияет ли порядок основных столбцов Джулии при вызове CVXPY через PyCall?

#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, которую я помню. Так что нет, это не вызывает никаких проблем