在循环内简化 numpy.dot

Simplify numpy.dot within loop

是否可以简化这个:

import numpy as np
a = np.random.random_sample((40, 3))
data_base = np.random.random_sample((20, 3))
mean = np.random.random_sample((40,))
data = []
for s in data_base:
    data.append(mean + np.dot(a, s))

data 的大小应为 (20, 40)。我想知道我是否可以做一些广播而不是循环。我无法使用 np.add 和一些 [:, None] 来完成。我当然没有正确使用它。

您的 data 创建了一个 (20,40) 数组:

In [385]: len(data)
Out[385]: 20
In [386]: data = np.array(data)
In [387]: data.shape
Out[387]: (20, 40)

dot 的直接应用产生相同的结果:

In [388]: M2=mean+np.dot(data_base, a.T)
In [389]: np.allclose(M2,data)
Out[389]: True

matmul 运算符也适用于这些数组(无需扩展和压缩):

M3 = data_base@a.T + mean