在循环内简化 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
是否可以简化这个:
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