numpy中的广播减去张量

时间:2018-04-20 02:48:40

标签: python numpy

请原谅我可能是一个简单的问题。

在张量中应用广播减去是否存在一种优雅,笨拙的方式?

e.g。

import numpy as np
u = np.concatenate((np.ones((3, 1)), np.zeros((3,1))), axis=1).reshape(3,1,2)
v = np.concatenate((np.zeros((3, 1)), np.ones((3,1))), axis=1).reshape(3,1,2)

我会得到结果

array([[[1, 0]],

       [[1, 0]],

       [[1, 0]]])

array([[[0, 1]],

       [[0, 1]],

       [[0, 1]]])

我想知道是否有一种优雅的方式来播放减号。这意味着如果我得到张量u的形​​状[L,m,n]和张量v与形状[L,m,n],我希望结果形状[L,L,m,n],其每秒axis是u中相应行与v。

中每个元素之间的负数

提前致谢!

1 个答案:

答案 0 :(得分:0)

这可能是你想要的:

w = u.reshape(3,1,1,2) - v.reshape(1,3,1,2)

w确实具有所需的(3, 3, 1, 2)形状和值:

array([[[[ 1., -1.]],

        [[ 1., -1.]],

        [[ 1., -1.]]],


       [[[ 1., -1.]],

        [[ 1., -1.]],

        [[ 1., -1.]]],


       [[[ 1., -1.]],

        [[ 1., -1.]],

        [[ 1., -1.]]]])

使用reshape要求您了解/查找uv的形状。有一种替代方法(看起来有点混乱)语法会在没有明确形状的情况下执行相同的重塑/广播:

w = u[:,None,...] - v[None,...]