点积和 numpy 数组和向量的添加

dot product and addition of numpy arrays and vectors

提问人:Jimakos 提问时间:11/7/2023 最后编辑:phoJimakos 更新时间:11/8/2023 访问量:37

问:

请考虑以下 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 向量。我在这里错过了什么?yWx[1][ 0.06678158 0.02322523 0.09542323 -0.05746891]bby

python 数组 numpy 向量

评论

0赞 pho 11/8/2023
b具有形状(列向量)和形状(行向量)。当你把它们加在一起时,它们就会被广播到 numpy.org/doc/stable/user/basics.broadcasting.html(4, 1)y(4,)(4, 4)
0赞 Jimakos 11/8/2023
@pho,谢谢。那么我怎样才能实现 b 和 y 兼容,从而使结果成为 (4,1) 向量呢?
0赞 Onyambu 11/8/2023
你为什么要使用而不是甚至?x[1]x[0]x

答:

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
恭喜你获得蟒蛇金徽章:)