逐个元素数组操作的元素数组维度

Array dimensions of element by element array operations

aa 是一个 n x 1 数组(aa.shape 产生 (n,1))。 bb 是一个 n 数组(bb.shape yields (n,))。 cc = aa - bb。 cc 是一个 n 乘 n 数组(cc.shape 产生(n,n)。cc 最多应该是 n 乘 1。这就是 numpy 应该如何工作的吗?这是一个错误吗?很难避免得到一个 n没有数组。

这是您在评论中发布的 MRE,已重新格式化:

>>> aa=np.array([[1],[2],[3],[4]])
>>> bb=np.array([1,2,3,4])
>>> aa - bb
array([[ 1, 0, -1, -2], [ 2, 1, 0, -1], [ 3, 2, 1, 0]])

你想在这里做什么?问题是 numpy 将每个嵌套字符串解释为一个新维度,因此 aa 有 4 行和 1 列,而 bb 有 1 行。当您减去它们时,numpy 将其解释为从 aa 中的每一行中减去 bb 中的每个值。这意味着结果将有与 aa 一样多的行,每列的值是 aa 的那一行与 bb.[=21= 的对应值之间的差值]

如果你只想将它们作为两个一维向量相减,那么你需要以不同的方式初始化aa或使用flatten方法:

>>> aa=np.array([[1],[2],[3],[4]])
>>> bb=np.array([1,2,3,4])
>>> aa = aa.flatten()
>>> aa - bb
array([0, 0, 0, 0])