gpt4 book ai didi

python - numpy中矩阵和一维数组之间的点积

转载 作者:太空狗 更新时间:2023-10-30 02:19:58 27 4
gpt4 key购买 nike

我需要在 numpy 中执行两个矩阵的点积。但是,其中一个在每一行中实际上具有相同的值。像这样的东西:

array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2]])

出于优化目的,我只将一列存储为一维数组。

有没有办法计算此矩阵与普通二维矩阵之间的点积,不必显式创建上述矩阵?

最佳答案

当您计算两个数组的点积时,您计算的是第一个数组的每一行与第二个数组的每一列的点积。如果您的向量拟合矩阵 (MTFIAV) 是点积的第一个操作数,则很容易看出您可以从点积中分解重复值,并对结果进行一次乘法运算总结第二个数组的每一列:

>>> a = np.arange(3)
>>> a
array([0, 1, 2])
>>> aa = np.repeat(a, 5).reshape(len(a), -1)
>>> aa
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2]])

>>> np.dot(aa, b)
array([[ 0, 0, 0, 0],
[ 40, 45, 50, 55],
[ 80, 90, 100, 110]])
>>> np.outer(a, b.sum(axis=0))
array([[ 0, 0, 0, 0],
[ 40, 45, 50, 55],
[ 80, 90, 100, 110]])

如果您的 MTFIAV 是第二个操作数,不难看出结果也将是 MTFIAV,并且可以通过计算第一个操作数与向量的点积来获得其向量表示:

>>> c = np.arange(12).reshape(4, 3)

>>> np.dot(c, aa)
array([[ 5, 5, 5, 5, 5],
[14, 14, 14, 14, 14],
[23, 23, 23, 23, 23],
[32, 32, 32, 32, 32]])
>>> np.dot(c, a)
array([ 5, 14, 23, 32])

关于python - numpy中矩阵和一维数组之间的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com