所以我有两个矩阵W
和X
。
print(W)
array([ 5.76951515, 19. ])
print(X)
array([[ 1., 5.],
[ 1., 6.],
[ 1., 7.],
[ 1., 8.],
[ 1., 9.],
[ 1., 10.],
[ 1., 11.],
[ 1., 12.],
[ 1., 13.],
[ 1., 14.]])
我想将矩阵W
和X
都相乘,每次W[1]
迭代都改变i
的值,就像这样。
for i in range(10):
W[1] = i
yP_ = W @ X.T
ecm = np.mean((Y - yP_ ) ** 2)
plt.plot(W[1], ecm, 'o')
plt.show()
有什么办法可以避免for
?
答案 0 :(得分:2)
尝试使W
的形状为(10,2)
,并在第二列中保持范围0-9
。然后,产品W @ X.T
的行是当前for循环的迭代。
W2 = np.full((10,2), W[0])
W2[:,1] = np.arange(10)
W2
# array([[5.76951515, 0. ],
# [5.76951515, 1. ],
# ...
# [5.76951515, 9. ]])
所以你可以做
ecm = np.mean((Y - W2 @ X.T)**2, axis=1) # average across columns
plt.plot(W2[:,1], ecm, 'o')
答案 1 :(得分:1)
您可以首先生成修改后的W
数组,然后像在以下位置一样应用矩阵乘积:
N=10
W_ = np.c_[[W[0]]*N, np.arange(N)]
yP_ = W_@X.T
快速检查:
yP_ = []
for i in range(N):
W[1] = i
yP_.append(W @ X.T)
np.allclose(np.array(yP_), W_@X.T)
# True