numpy 如何在两个不同的矩阵之间对齐尺寸以使用np.dot()

nuypyhwy  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(195)

我尝试在Numpy中使用两个不同维度的矩阵的点积。w是(1,5),X是(3,5)。我不确定我可以使用哪个命令来更改维度,因为我是python的新手。谢谢。
当我尝试运行我的函数时,它给我一个错误消息:

ValueError: shapes (1,5) and (3,5) not aligned: 5 (dim 1) != 3 (dim 0)
from numpy.core.memmap import ndarray
def L(w, X, y):
    """
    Arguments:
    w -- vector of size n representing weights of input features n
    X -- matrix of size m x n represnting input data, m data sample with n features each 
    y -- vector of size m (true labels)
  
    Returns:
    loss -- the value of the loss function defined above
    """
    
    ### START CODE HERE ### (2-4 lines of code)
    #w needs to match X matrix
    # w = (1, 5)
    # x = (3, 5)
    yhat = np.dot(w, X)
    L1 = y - yhat
    loss = np.dot(L1, L1)

    
    ### END CODE HERE ###
    
    return loss

下面是方向的图片:image of directions

dy2hfwbg

dy2hfwbg1#

两个向量的点积是关于位置的元素的乘积之和。第一个向量的第一个元素乘以第二个向量的第一个元素,依此类推。这些乘积之和就是点积,可以使用np.dot()函数完成。
因为我们把相同位置的元素相乘,所以两个向量必须有相同的长度才能得到点积。

import numpy as np 
a = np.array([[1,2],[3,4]]) 
b = np.array([[11,12],[13,14]]) 
np.dot(a,b)

它将生成以下输出-

[[37  40] 
 [85  92]]

注意点积的计算公式为−

[[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]
zfciruhq

zfciruhq2#

tensordot可实现任意轴选择的Tensor积,因此具有充分的灵活性。
一个很好的应用是估计协方差矩阵,而不干扰转置:

import numpy as np
from scipy.stats import multivariate_normal

dist = multivariate_normal(mean=[0,0],cov=[[1,1],[1,2]])
samples = dist.rvs(1000,2)
np.tensordot(samples,samples,axes=[0,0])/len(samples) # close to [[1,1],[1,2]

相关问题