Numpy 矩阵减法不同维度
Numpy Matrix Subtraction Different Dimensions
我目前有一个尺寸为 40 x 3 x 3 x 5 x 1000 的 5D numpy 数组,其中尺寸分别由 a x b x c x d x e 标记。
我有另一个尺寸为 3 x 1000 的 2D numpy 数组,其中尺寸分别由 b x e 标记。
我想从二维数组中减去五维数组。
我想到的一种方法是将 2D 扩展为 5D 数组(因为 2D 数组不会因其他 3 维的所有组合而改变)。我不确定我可以使用哪个数组 method/numpy 函数来执行此操作。
我开始迷失了 nD 数组操作。感谢您的协助。
IIUC,假设你的数组是 a 和 b:
np.swapaxes(np.swapaxes(a, 1, 3) - b, 1, 3)
In [217]: a,b,c,d,e = 2,3,4,5,6
In [218]: A = np.ones((a,b,c,d,e),int); B = np.ones((b,e),int)
In [219]: A.shape
Out[219]: (2, 3, 4, 5, 6)
In [220]: B.shape
Out[220]: (3, 6)
In [221]: B[None,:,None,None,:].shape # could also use reshape()
Out[221]: (1, 3, 1, 1, 6)
In [222]: C = B[None,:,None,None,:]-A
In [223]: C.shape
Out[223]: (2, 3, 4, 5, 6)
第一个 None
不是必需的; numpy 会根据需要添加它,但作为一个人,它可能有助于看到它。
我目前有一个尺寸为 40 x 3 x 3 x 5 x 1000 的 5D numpy 数组,其中尺寸分别由 a x b x c x d x e 标记。
我有另一个尺寸为 3 x 1000 的 2D numpy 数组,其中尺寸分别由 b x e 标记。
我想从二维数组中减去五维数组。
我想到的一种方法是将 2D 扩展为 5D 数组(因为 2D 数组不会因其他 3 维的所有组合而改变)。我不确定我可以使用哪个数组 method/numpy 函数来执行此操作。
我开始迷失了 nD 数组操作。感谢您的协助。
IIUC,假设你的数组是 a 和 b:
np.swapaxes(np.swapaxes(a, 1, 3) - b, 1, 3)
In [217]: a,b,c,d,e = 2,3,4,5,6
In [218]: A = np.ones((a,b,c,d,e),int); B = np.ones((b,e),int)
In [219]: A.shape
Out[219]: (2, 3, 4, 5, 6)
In [220]: B.shape
Out[220]: (3, 6)
In [221]: B[None,:,None,None,:].shape # could also use reshape()
Out[221]: (1, 3, 1, 1, 6)
In [222]: C = B[None,:,None,None,:]-A
In [223]: C.shape
Out[223]: (2, 3, 4, 5, 6)
第一个 None
不是必需的; numpy 会根据需要添加它,但作为一个人,它可能有助于看到它。