Python Numpy数组减法创建具有不同维数的矩阵。如何纠正这一点?

Python Numpy数组减法创建具有不同维数的矩阵。如何纠正这一点?,python,numpy,machine-learning,Python,Numpy,Machine Learning,我正在尝试使用Python创建一个简单的神经网络(我知道有库,但我正在从头构建一个简单的库,以便更熟悉所采取的每一步),其中一部分是计算真实标签和预测标签之间的差异 我在dim中有真实标签,预测标签也在dim中 两者都在np数组中 我希望有一个简单的 l2_error=tag_train-l2 我会做的。(l2为预测标签,tag_train为真实标签) 但我得到的回报是矩阵。看起来这个操作是对所有可能的元素组合进行减法运算。为什么会发生这种情况?我知道我可能可以运行for循环来完成工作,因为我

我正在尝试使用Python创建一个简单的神经网络(我知道有库,但我正在从头构建一个简单的库,以便更熟悉所采取的每一步),其中一部分是计算真实标签和预测标签之间的差异

我在dim中有真实标签,预测标签也在dim中

两者都在np数组中

我希望有一个简单的

l2_error=tag_train-l2
我会做的。(l2为预测标签,tag_train为真实标签)

但我得到的回报是矩阵。看起来这个操作是对所有可能的元素组合进行减法运算。为什么会发生这种情况?我知道我可能可以运行
for
循环来完成工作,因为我想知道为什么程序会产生这样的结果


顺便说一句,这两种数据类型都是float64。我认为这并不重要,但只是为了防止需要这些信息。

正如您在评论中所指出的,现在发生的情况是,
tag\u train
是一个长度为2059的一维数组,而
l2
应该是一个具有2059行和1列的二维数组

因此,当您尝试进行减法运算时,它将生成一个包含2059行和2059列的二维数组

如果您100%确定l2将仅为一列,则可以在执行减法之前重塑该数组,使其为一维。像-

l2.reshape((l2.shape[0],))

示例/演示-

In [1]: import numpy as np

In [2]: l1 = np.array([1,2,3,4])

In [3]: l2 = np.array([[5],[6],[7],[8]])

In [7]: l2.shape
Out[7]: (4, 1)

In [8]: l2-l1
Out[8]:
array([[4, 3, 2, 1],                 #Just to show that you get the behaviour when arrays are in 
       [5, 4, 3, 2],                 #different dimensions.
       [6, 5, 4, 3],
       [7, 6, 5, 4]])

In [19]: l2 = l2.reshape((l2.shape[0],))

In [25]: l2 = l2.reshape((l2.shape[0],))

In [26]: l2-l1
Out[26]: array([4, 4, 4, 4])

你一定是弄错尺寸了。我怀疑tag_train.shape==(2059,1),而不是(12059)。如果使用1d数组,就不会遇到这个问题。@Alan我对tag_train.shape进行了测试,结果返回(2059,)。是的,缺少第二个元素。我想这可能是我的减法运算出错的原因,但我不确定为什么。
(n,)
自动扩展到
(1,n)
,如果广播需要的话。您需要的是
x[:,None]
在末尾添加第二个维度以匹配其他数组。我明白了,所以维度确实成了问题。我一直认为程序会自动调整它,只要两个数组中的元素数量相同(因此(2059,)将与(2059,1)相同)。有一个问题:首先将tag_列重塑为2D阵列是否是一个好的做法?是的,您也可以这样做,这基本上取决于您的需要。如果以后还想将tag_train用作2d数组,那么这可能是一个不错的选择。