有没有办法用N维数组实现凸优化?

Is there a way to implement convex optimization using N-dimensional arrays?

给定 shape = (t,m,n) 的数据,我需要找到一个形状为 (n,) 的向量变量,使数据和向量的凸函数最小化。我已经使用 cvxopt(和 cvxpy)使用 2D 输入执行凸优化,但它们似乎不支持 3D 数组。有没有办法使用这些或其他类似的包来实现这种凸优化?

给定形状为 (t,m,n)(t,m) 的数据以及形状为 (n,) 的变量,这里是我需要最小化的函数类型的简化:

import numpy as np

obj_func(var,data1,data2):
    #data1.shape = (t,m,n)
    #data2.shape = (t,m)
    #var.shape = (n,)

    score = np.sum(data1*var,axis=2) #dot product along axis 2
    time_series = np.sum(score*data2,axis=1) #weighted sum along axis 1
    return np.sum(time_series)-np.sum(time_series**2) #some function

这似乎应该是一个简单的凸优化,但不幸的是 cvxopt/cvxpy 中的 N 维数组不支持这些函数。有没有办法实现这个?

我想如果你只是暂时将 data1 重塑为 2d 你会没事的,例如

import numpy as np
import cvxpy as cp
t, m, n = 10, 8, 6
data1 = np.ones((t, m, n))
data2 = np.ones((t, m))
x = cp.Variable(n)
score = cp.reshape(data1.reshape(-1, n) * x, (t, m))
time_series = cp.sum(cp.multiply(score, data2), axis=1)
expr = cp.sum(time_series) - cp.sum(time_series ** 2)
print(repr(expr))

输出:

Expression(CONCAVE, UNKNOWN, ())