python - 同时从 numpy 数组和元组获取点积

标签 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”:

[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)

任何指示都会非常有帮助吗?

最佳答案

首先,让我们拆分 2 个变量:wb。它们并不是真正的数组,它们是具有不同形状的数组列表

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]])

也许稍后您可以将它们作为 2 个元素列表进行迭代,但现在这只会让事情变得复杂。

现在您的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

I0 = np.array([i]).T
a0 = np.sum(w0*i0, axis=0) + b0

这些总和可以变成点;我认为这有效:

a0 = np.dot(w0.T,i) + b0  

但我怀疑这是否有很大的改进。

您无法同时计算 a0a1,因为其中一个会使用另一个。但您可以将其转换为迭代,例如(未测试):

I0 = ...
w = [w0,w1]
b = [b0,b1]
a = [None,None]
for i in range(...):
   a[i] = np.sum(w[i]*I0, axis=0) + b[i]
   I0 = a[i]

关于python - 同时从 numpy 数组和元组获取点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805979/

相关文章:

python - numpy 数组索引的意外行为

python - Numpy:ImportError:无法导入名称 TestCase

python - 3D 向量的平面方程

python - 非贪婪换行符与 re.DOTALL 匹配

python - pygtk : saving the project file with suffix ".xyz"

python - 使用 CSV 的第二列按升序排序?

python - 在python中制作没有引用的列表列表

python - 如何在符号表达式中使用 python 数组?

python - 有效地重新排列多维数组的列

python - Sympy:为什么 cholesky 不适用于这个对称矩阵?