为什么 .T 会修复二维数组中的点积错误?
Why does .T fix my dot product error in two dimensional arrays?
我有两个这样的二维数组:
arr1 = np.random.randn(4, 3)
arr2 = np.random.randn(4, 3)
当我试图找到它们之间的点积时,出现错误:
np.dot(arr1, arr2)
Error: ValueError: shapes (4,3) and (4,3) not aligned: 3 (dim 1) != 4 (dim 0)
经过一些研究,我发现通过将 .T
添加到它起作用的数组之一:
np.dot(arr1.T, arr2)
但我的问题是为什么添加 .T
会起作用,T
代表什么,它究竟有什么作用?
要理解这一点,您需要了解矩阵乘法的工作原理。
要对任意两个维度为R1xC1 和R2xC2 的矩阵进行点积,需要C1==R2。输出矩阵的形状为 R1xC2。因此,当您调用 .T 或转置而不是 (4,3) 和 (4,3) 时,点出现在 (3,4) 和 (4,3) 之间,为您提供形状 (3,3) 的输出.
我认为您可能将点积与元素积混淆了,在元素积中您可以与相同形状的矩阵相乘并获得相同形状的输出。为此,arr1*arr2
就足够了。
我有两个这样的二维数组:
arr1 = np.random.randn(4, 3)
arr2 = np.random.randn(4, 3)
当我试图找到它们之间的点积时,出现错误:
np.dot(arr1, arr2)
Error: ValueError: shapes (4,3) and (4,3) not aligned: 3 (dim 1) != 4 (dim 0)
经过一些研究,我发现通过将 .T
添加到它起作用的数组之一:
np.dot(arr1.T, arr2)
但我的问题是为什么添加 .T
会起作用,T
代表什么,它究竟有什么作用?
要理解这一点,您需要了解矩阵乘法的工作原理。
要对任意两个维度为R1xC1 和R2xC2 的矩阵进行点积,需要C1==R2。输出矩阵的形状为 R1xC2。因此,当您调用 .T 或转置而不是 (4,3) 和 (4,3) 时,点出现在 (3,4) 和 (4,3) 之间,为您提供形状 (3,3) 的输出.
我认为您可能将点积与元素积混淆了,在元素积中您可以与相同形状的矩阵相乘并获得相同形状的输出。为此,arr1*arr2
就足够了。