我想使用列表作为参数,从函数的结果生成一个列表

2024-10-01 07:42:40 发布

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

我试图通过使用其他列表作为函数的参数来创建一个列表。但是,我似乎无法获得正确的语法。
这是我的代码:

f1 = theta0 + theta1*(X1_train) + theta2*(X2_train)+theta3*(X3_train)

预期结果将是一份长度相同的X1_序列、X2_序列和X3_序列的列表(这三个序列的长度相同)

我希望得到列表X1\u列、X2\u列和X3\u列上每个元素的结果列表,作为函数的参数。例如,如果我的列表是

X1_train = [0, 1]
X2_train = [1, 2]
X3_train = [0, 2]

我希望有一个数字列表,比如

f1 = [theta0 + theta2, theta0 + theta1 + theta2 + 2*theta3]

θ是随机数

这个列表是一个数据帧的列,我将其转换为列表,这样我就可以完成这个功能


Tags: 函数代码列表参数语法train序列f1
3条回答

我建议您尝试以下简单代码:

def f(X: tuple, theta: tuple):
   if not isinstance(X, tuple):
      raise TypeError('X must be a tuple')
   if not isinstance(theta, tuple):
      raise TypeError('theta must be a tuple')
   if not X.__len__() == theta.__len__():
      raise ValueError('length of tuples is not equal')
   return sum([np.array(x_)*t_ for x_, t_ in zip(X, theta)])

注意,如果X或θ不是相同长度的元组,则会抛出错误

示例:(应该按原样工作

import numpy as np
X1_train = [0, 1]
X2_train = [1, 2]
X3_train = [0, 2]

theta_1 = 1
theta_2 = 1
theta_3 = 3
print(f(
    (X1_train, X2_train, X3_train),
    (theta_1, theta_2, theta_3)
    ))
>>> [1 9]

使用zip将三个列表压缩成一个包含3个元组的列表,解压缩3个元组,然后将每个theta值与其对应的元素相乘,然后对结果求和

f1 = [theta0 + theta1*x1 + theta2*x2 + theta3*x3
      for x1, x2, x3 in zip(X1_train, X2_train, X3_train)]

如果你认为theta0是1的倍数,你可以把它推广到

from itertools import repeat


f1 = [theta0*x0 + theta1*x1 + theta2*x2 + theta3*x3
      for x0, x1, x2, x3 in zip(repeat(1), X1_train, X2_train, X3_train)]

你可以把它简化为

from operator import mul
thetas = [theta0, theta1, theta2, theta3]
trains = [repeat(1), X1_train, X2_train, X3_train]
f1 = [sum(map(mul, t, thetas)) for t in zip(*trains)]

sum(map(mul, t, thetas))只是tthetas的点积

def dotp(x, y):
    return sum(map(mul, x, y))

f1 = [dotp(t, thetas) for t in zip(*trains)]

我希望这有助于:

import random

X1_train = [0,1]
X2_train = [1,2]
X3_train = [0,1]

amnt = 2

theta0 = random.sample(range(1, 10), amnt)
theta1 = random.sample(range(1, 10), amnt)
theta2 = random.sample(range(1, 10), amnt)
theta3 = random.sample(range(1, 10), amnt)

EndValues = []
for i in range(0, len(X1_train)):

f1 = theta0[i] + theta1[i] * X1_train[i] + theta2[i] * X2_train[i] + theta3[i] * X3_train[i]
EndValues.append(f1)

print(EndValues)

这是回报

[3, 6] [5, 1] [2, 5] [7, 8]
[5, 25]

相关问题 更多 >