逐个元素数组操作的元素数组维度
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])
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])