提问人:Jimakos 提问时间:11/7/2023 最后编辑:phoJimakos 更新时间:11/8/2023 访问量:37
点积和 numpy 数组和向量的添加
dot product and addition of numpy arrays and vectors
问:
请考虑以下 MWE:
import numpy as np
def create_weight_matrix(nrows, ncols):
"""Create a weight matrix with normally distributed random elements."""
return np.random.default_rng().normal(loc=0, scale=1/(nrows*ncols), size=(nrows, ncols))
def create_bias_vector(length):
"""Create a bias vector with normally distributed random elements."""
return create_weight_matrix(length,1)
if __name__ == "__main__":
num_samples = 100
num_features = 5
W = create_weight_matrix(4, num_features)
b = create_bias_vector(4)
x = np.random.rand(num_samples, num_features)
y = W.dot(x[1])
print(y.shape)
t = y + b
print(t.shape)
中间变量被正确地计算为 和 的点积,输出是 形式的向量。然后我尝试添加向量,我希望这是按元素执行的,但由于某种原因,代码将所有元素添加到所有元素中,以在最后创建 4x4 矩阵而不是 4x1 向量。我在这里错过了什么?y
W
x[1]
[ 0.06678158 0.02322523 0.09542323 -0.05746891]
b
b
y
答:
0赞
pho
11/8/2023
#1
b
具有形状(列向量)和形状(行向量)。当你把它们加在一起时,它们会被广播成一个形状的数组。您可以通过显式地将其中一个向量重塑为与另一个向量相同的形状来避免这种情况。(4, 1)
y
(4,)
(4, 4)
对于 shape 的列向量,请使用以下任意行:(4, 1)
t = b + y.reshape(b.shape)
t = b + y[:, None]
y[:, None]
向一维数组添加一个新轴
或者,对于形状的行向量:(4,)
t = b.reshape(y.shape) + y
t = b.squeeze() + y
评论
1赞
Goku - stands with Palestine
11/8/2023
恭喜你获得蟒蛇金徽章:)
上一个:Numpy 比较嵌套数组
评论
b
具有形状(列向量)和形状(行向量)。当你把它们加在一起时,它们就会被广播到 numpy.org/doc/stable/user/basics.broadcasting.html(4, 1)
y
(4,)
(4, 4)
x[1]
x[0]
x