python - 未调整大小的对象的 len() - cvxpy - 相关性最大化

标签 python convex-optimization cvxpy

import numpy as np
import pandas as pd
from scipy.stats.stats import pearsonr
from cvxpy import Variable, Problem, Maximize

X = np.random.rand(1000, 4)
Y = np.random.rand(1000, 4)
weights = Variable(4,)
constraints = []

def get_correlation(a):
    return pearsonr(X * a, Y *a)

obj = Maximize(get_correlation(weights))
problem = Problem(obj, constraints)
problem.solve()

我正在尝试使用 cvxpy 来查找向量权重的值,以执行两个矩阵的线性变换。目标函数是两个变换矩阵之间 PIL 逊相关性的最大化。

我不明白为什么会收到以下错误。

      4 def get_correlation(a):
----> 5     return pearsonr(X * a, Y *a)
      6 
      7 obj = Maximize(get_correlation(weights))

~/Python/global/lib/python3.6/site-packages/scipy/stats/stats.py in pearsonr(x, y)
   3030     x = np.asarray(x)
   3031     y = np.asarray(y)
-> 3032     n = len(x)
   3033     mx = x.mean()
   3034     my = y.mean()

TypeError: len() of unsized object

最佳答案

您的错误是因为pearsonr期望传递两个类似输入的数组 xy .

您创建了数组 XY在你的代码中,是的。但是如果你检查 X * weights 的类型(这就是您实际传递给 pearsonr 的内容)您会看到它的类型为 cvxpy.atoms.affine.binary_operators.MulExpression ,它没有长度属性,所以 len(X * weights)抛出错误。

关于python - 未调整大小的对象的 len() - cvxpy - 相关性最大化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736650/

相关文章:

matlab - 如何检查成本函数是凹函数还是凸函数?

python - 只有等式约束的 CVXOPT

python - Turbogears2 和 py.test

python - 使用 CVXPY 实现 LMI 约束

python - 根据另一个数据框中的行查询一个数据框行并比较值

python - 无法将 cvxpy 安装到 AWS lambda 的 virtualenv 中

python - cvxpy:将非线性约束转换为等效线性约束

python - 如何告诉 cvxpy 如何对目标函数中矩阵的值求和?

python - kivy anchor 布局不锚定?

python - 根据近似相对距离估计绝对位置