擅长:python、mysql、java
<p>使用<code>zip</code>将三个列表压缩成一个包含3个元组的列表,解压缩3个元组,然后将每个<code>theta</code>值与其对应的元素相乘,然后对结果求和</p>
<pre><code>f1 = [theta0 + theta1*x1 + theta2*x2 + theta3*x3
for x1, x2, x3 in zip(X1_train, X2_train, X3_train)]
</code></pre>
<p>如果你认为<code>theta0</code>是1的倍数,你可以把它推广到</p>
<pre><code>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)]
</code></pre>
<p>你可以把它简化为</p>
<pre><code>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)]
</code></pre>
<p><code>sum(map(mul, t, thetas))</code>只是<code>t</code>和<code>thetas</code>的点积</p>
<pre><code>def dotp(x, y):
return sum(map(mul, x, y))
f1 = [dotp(t, thetas) for t in zip(*trains)]
</code></pre>