Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 同时从numpy数组和元组中获取点积_Python_Numpy_Linear Algebra - Fatal编程技术网

Python 同时从numpy数组和元组中获取点积

Python 同时从numpy数组和元组中获取点积,python,numpy,linear-algebra,Python,Numpy,Linear Algebra,我正在尝试组合数组和元组的不同部分,以生成一系列产品。这是元组“i”: i=(2,5) 这是第一个矩阵“w”: w=[array([[-1.95446441, 1.53904854, -0.3461807 ], [-0.19153855, -1.63290931, -1.76897156]]), array([[ 0.25648535], [ 0.20186475], [ 0.78002102]])] 这是第二个矩阵“b”

我正在尝试组合数组和元组的不同部分,以生成一系列产品。这是元组“i”:

i=(2,5)
这是第一个矩阵“w”:

w=[array([[-1.95446441,  1.53904854, -0.3461807 ],
          [-0.19153855, -1.63290931, -1.76897156]]), 
   array([[ 0.25648535],
          [ 0.20186475],
          [ 0.78002102]])]
这是第二个矩阵“b”:

[array([[-0.02676943],
        [ 0.25294377],
        [-0.43625132]]), 
 array([[ 0.07763943]])]
我试图从这些数据结构的不同部分,在一个名为“a”的列表或矩阵列表中,制作一系列产品

这些产品的清单应等同于:

a[0][0] = (w[0][0][0]*i[0]) + (w[0][1][0]*i[1]) + b[0][0]
a[0][1] = (w[0][0][1]*i[0]) + (w[0][1][1]*i[1]) + b[0][1]
a[0][2] = (w[0][0][2]*i[0]) + (w[0][1][2]*i[1]) + b[0][2]

a[1][0] = (w[1][0] * a[0][0]) + (w[1][1] * a[0][1]) + (w[1][2] * a[0][2]) + b[1][0]
我正试图将其作为神经网络的一部分,并且已经编写了一个版本,该版本使用迭代非常有效。然而,我是numpy新手,我想建立一个基于矩阵的版本。我遇到的问题更多的是理解numpy语法来执行上面的操作。我试着从一个在线教程中修改这个,但不确定从这里可以走到哪里

for b, w in zip(b, w):
     layer = sigmoid(np.dot(w, layer)+b.T)
     a.append(layer)
这会引发以下错误:

ValueError: shapes (2,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)

任何指针都会很有帮助吗?

首先,让我们拆分两个变量,
w
b
。它们不是真正的数组,而是具有不同形状的数组列表

w0 = array([[-1.95446441,  1.53904854, -0.3461807 ],
          [-0.19153855, -1.63290931, -1.76897156]]) 
w1 = array([[ 0.25648535],
          [ 0.20186475],
          [ 0.78002102]])

b0 = array([[-0.02676943],
        [ 0.25294377],
        [-0.43625132]])
b1 = array([[ 0.07763943]])
也许以后您可以将它们作为两个元素列表进行迭代,但现在这只会使事情变得复杂

现在,您的
a
计算简化为:

a0[0] = w0[0,0]*i[0] + w0[1,0]*i[1] + b0[0]
a0[1] = w0[0,1]*i[0] + w0[1,1]*i[1] + b0[1]
a0[2] = w0[0,2]*i[0] + w0[1,2]*i[1] + b0[2]

a1[0] = w1[0]* a0[0] + w1[1]*a0[1] + w1[2]*a0[2] + b1[0]
a0 = w0[0,:]*i[0] + w0[1,:]*i[1] + b0
a1 = np.sum(w1*a0) + b1
这进一步简化为:

a0[0] = w0[0,0]*i[0] + w0[1,0]*i[1] + b0[0]
a0[1] = w0[0,1]*i[0] + w0[1,1]*i[1] + b0[1]
a0[2] = w0[0,2]*i[0] + w0[1,2]*i[1] + b0[2]

a1[0] = w1[0]* a0[0] + w1[1]*a0[1] + w1[2]*a0[2] + b1[0]
a0 = w0[0,:]*i[0] + w0[1,:]*i[1] + b0
a1 = np.sum(w1*a0) + b1

这些总和可以变成点;我认为这是可行的:

a0 = np.dot(w0.T,i) + b0  
但我怀疑这是否是一个很大的进步

您不能同时计算
a0
a1
,因为其中一个使用另一个。但您可以将其转换为迭代,如(未测试):


错误很明显,矩阵尺寸不匹配。您正在尝试计算2x3矩阵和1x3矩阵的乘积。我想你应该做
np.dot(w,np.tranpose(layer))
谢谢你的评论,是的,我理解为什么会发生错误,但这是语法问题,而不是计算问题。如果你看一下我上面详细介绍的内容,特别是最后一节“a[1][0]=(w[1][0]*a[0][0])+(w[1][1]*a[0][1])+(w[1][2]*a[0][2]+b[1][0]”,这就是我试图实现的目标,但只是不知道如何让numpy以一种广义的形式实现这一点。你所展示的每一步都非常有帮助,这使得查看代码正在做什么变得非常容易。是的,我想‘a’必须分批计算,我想用numpy来计算每一批,你肯定提高了我对它的理解。非常感谢。