无尺寸对象的len()cvxpy相关最大化

2024-04-19 05:40:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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来求向量权重的值,对两个矩阵进行线性变换。目标函数是两个变换矩阵之间皮尔逊相关性的最大化。你知道吗

我不明白为什么会出现以下错误。你知道吗

      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

Tags: fromimportobjgetasstatsnpscipy
1条回答
网友
1楼 · 发布于 2024-04-19 05:40:28

您的错误是因为pearsonr希望传递两个类似于数组的输入xy。你知道吗

您在代码中创建了数组XY,是的。但是如果您检查X * weights(这是您实际传递给pearsonr)的类型,您将看到它的类型cvxpy.atoms.affine.binary_operators.MulExpression,它没有length属性,因此len(X * weights)会抛出一个错误。你知道吗

相关问题 更多 >