Numpy np.dot的错误结果

Numpy np.dot的错误结果,numpy,matrix-multiplication,np,Numpy,Matrix Multiplication,Np,我是python新手,我正在尝试将2d矩阵与一维矩阵相乘。我用np.dot来做,但它给了我一个错误的输出。我正在尝试这样做: #X_train.shape = 60000 w = np.zeros([784, 1]) lista = range (0, len(X_train)) for i in lista: score = np.dot(X_train[i,:], w) print score.shape Out->(1L,) 输出应为(60000,1) 你知道如何解决这个问题吗?

我是python新手,我正在尝试将2d矩阵与一维矩阵相乘。我用np.dot来做,但它给了我一个错误的输出。我正在尝试这样做:

#X_train.shape = 60000
w = np.zeros([784, 1])
lista = range (0, len(X_train))
for i in lista:
    score = np.dot(X_train[i,:], w)
print score.shape
Out->(1L,)

输出应为(60000,1)


你知道如何解决这个问题吗?

你应该完全避免for循环。事实上,np.dot应该在N-dim阵列上工作,并在内部执行循环。例如,见

In [1]: import numpy as np

In [2]: a = np.random.rand(1,2)  # a.shape = (1,2)

In [3]: b = np.random.rand(2,3)  # b.shape = (2,3)

In [4]: np.dot(a,b)
Out[4]: array([[ 0.33735571,  0.29272468,  0.09361096]])

当我在for循环外将它们相乘时,它会给出所需的结果。问题是当我将操作放入for循环中时,我应该使用它,因为我需要它进行进一步的计算。可能问题在于我给出的索引?1)不是两个数组的元素相乘,这将由X*Y实现。2)在循环中,每次覆盖分数时,只返回最后一个。3) 当w的所有元素都为零时,为什么首先要与w相乘?这也使得所有产品都为零。也许一个小n的样本输入和样本输出会使它更容易访问,这是你试图实现的。我在这里只放了一部分代码。w会在一些if条件的基础上发生变化,即使我把打印放在分数下,它也会打印出60000倍相同的结果(1L,)。当我用点积进行乘法时,它是有效的。无论如何,我会更仔细地看点产品。谢谢,恐怕你的意图还不清楚。你能提供更多的细节吗?如果你想做矩阵乘法,不需要循环-这正是
np.dot
的用途。如果您的X_列的形状为(6000,784)且
w
的形状为(784,1)
np。dot(X_列,w)
将生成所需的形状(6000,1)。
X_列。形状
不能为6000<代码>形状
始终是一个元组。如果你的意思是(6000,),那么你如何索引
X_train[i,:]
(就好像它是2d一样)?还是(60000784)?在循环中,您计算
分数
,但下次通过替换它。所以最后一个形状就是最后一次计算的形状<(n,)与(n,1)的代码>点
将产生(1,)结果。