Python &引用;ValueError:matmul:输入操作数1的核心维度0不匹配。。。(2号与1号不同)“;

Python &引用;ValueError:matmul:输入操作数1的核心维度0不匹配。。。(2号与1号不同)“;,python,numpy,matrix-multiplication,Python,Numpy,Matrix Multiplication,我刚刚开始学习Python/NumPy。我想写一个函数,它将应用一个具有2个输入和1个输出以及给定权重矩阵的操作,即两个形状(2,1)的NumPy数组,并且应该使用tanh返回一个形状(1,1)的NumPy数组。以下是我的想法: import numpy as np def test_neural(inputs,weights): result=np.matmul(inputs,weights) print(result) z = np.tanh(result)

我刚刚开始学习Python/NumPy。我想写一个函数,它将应用一个具有2个输入和1个输出以及给定权重矩阵的操作,即两个形状(2,1)的NumPy数组,并且应该使用tanh返回一个形状(1,1)的NumPy数组。以下是我的想法:

import numpy as np
def test_neural(inputs,weights):
    result=np.matmul(inputs,weights)
    print(result)
    z = np.tanh(result)
    return (z)
x = np.array([[1],[1]])
y = np.array([[1],[1]])

z=test_neural(x,y)
print("final result:",z)
但我得到了以下matmul错误:

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 1)

有人能告诉我我缺少什么吗?

问题是矩阵乘法的维数

您可以将矩阵与共享维度相乘,如下所示(阅读更多内容):

您尝试乘法:

(2 , 1) * (2, 1)
但是尺寸是非法的

因此,您必须在乘法之前转置
输入
(只需在矩阵上应用
.T
),以便获得乘法的有效维数:

(1, 2) * (2, 1) => Result dimension is (1, 1)
代码:


不能将形状
(2,1)
两个矩阵都乘以矩阵。您需要将一个矩阵转置,以便将第一个矩阵与形状
(1,2)
和另一个
(2,1)
相乘。这将为您提供一个
(1,1)
的形状。这不是一个python/numpy特定的问题,而是一个数学问题。
matmul
详细描述了维度应该如何排列。关键的最后一个dim是A与B的第二个到最后一个,经典的行与列的矩阵乘法,这与你的答案无关,但是你能不能停止挖掘旧的、休眠的问题,进行一些小的、无关紧要的编辑?您的修订历史记录中充满了此类编辑@你对转置的评论非常有帮助。非常感谢。
(1, 2) * (2, 1) => Result dimension is (1, 1)
import numpy as np
def test_neural(inputs,weights):
    result=np.matmul(inputs.T, weights)
    print(result)
    z = np.tanh(result)
    return (z)
x = np.array([[1],[1]])
y = np.array([[1],[1]])

z=test_neural(x,y)

# final result: [[0.96402758]]
print("final result:",z)