Machine learning 矢量化问题
假设有两个列向量vv和ww,每个列向量有7个元素(即,它们的维度为7x1)。考虑下面的代码:Machine learning 矢量化问题,machine-learning,octave,Machine Learning,Octave,假设有两个列向量vv和ww,每个列向量有7个元素(即,它们的维度为7x1)。考虑下面的代码: z = 0; for i = 1:7 z = z + v(i) * w(i) end A) z=总和(v.*w) B) z=w'*v C) z=v*w D) z=w*v 根据答案,答案(A)和(B)是正确的答案,有人能帮我理解为什么吗 为什么z=v*w'与答案(B)相似,但只是操作顺序发生变化,它是假的?既然我们想要一个根据定义只有一列的向量,我们不需要一个这样大小的矩阵:1x7*7x1=1x1吗
z = 0;
for i = 1:7
z = z + v(i) * w(i)
end
A) z=总和(v.*w)
B) z=w'*v
C) z=v*w
D) z=w*v
根据答案,答案(A)和(B)是正确的答案,有人能帮我理解为什么吗
为什么z=v*w'与答案(B)相似,但只是操作顺序发生变化,它是假的?既然我们想要一个根据定义只有一列的向量,我们不需要一个这样大小的矩阵:1x7*7x1=1x1吗?那么为什么z=v'*w是假的呢?它给出了与答案(B)相同的维度
z=v'*w
为真,等于w'*v
它们都构成1*1矩阵,这是一个八度的数值
见此:
octave:5> v = rand(7, 1);
octave:6> w = rand(7, 1);
octave:7> v'*w
ans = 1.3110
octave:8> w'*v
ans = 1.3110
octave:9> sum(v.*w)
ans = 1.3110
答案A和B都执行两个向量的点积,其结果与提供的代码相同。答案A首先执行两个列向量的元素乘积(*),然后对这些中间值求和。答案B执行相同的数学运算,但通过点积(即矩阵乘法)执行 答案C不正确,因为它将在未对齐的矩阵(7x1和7x1)上执行矩阵乘法。D也是如此
z=v*w'
不是选项之一,它是不正确的,因为它将产生7x7矩阵(而不是所需的1x1标量值)。关键是执行矩阵乘法时顺序很重要<代码>(1xN)X(Nx1)->(1x1),而(Nx1)X(1xN)->(NxN)
z=v'*w
实际上是一个正确的解决方案,但并不是作为选项之一提供的。z=v'*w不在选项中。这个问题听起来好像您没有访问MATLAB的权限。然后安装OCTAVE(它主要是MATLAB的一个开源克隆)并尝试它。