假设我有一个m维矩阵M和一个长度为n的数组N。M的形状是(a,B,n,e,f),这意味着在特定的轴(这里是2)上,M的维数与N的维数一致。如果我想把它们相乘,在这种情况下,我会这样做:
M
n
N
M * N[None, None, :, None, None]
字符串如何将这个概念推广到M的形状不同并且轴可能不同的情况?我确信必须有一个方便的函数来相应地扩展数组N,但我找不到任何东西
xfyts7mz1#
我会说明几种方法
In [29]: a,b,n,e,f = 2,3,4,5,6 In [30]: M=np.ones((a,b,n,e,f)); N=np.arange(n)
字符串N可以用None展开;只需要尾随的;前导的是隐式的
None
In [31]: (M*N[:,None,None]).shape Out[31]: (2, 3, 4, 5, 6)
型我们可以使用如下内容创建一个索引元组:
In [32]: idx = [None]*M.ndim;idx Out[32]: [None, None, None, None, None] In [33]: idx[2]=slice(None) In [34]: (M*N[tuple(idx)]).shape Out[34]: (2, 3, 4, 5, 6)
型或者我们可以重新整形N,添加所需的尾随尺寸1维:
In [35]: shp = [1]*M.ndim; shp[2]=N.shape[0] In [36]: (M*N.reshape(shp)).shape Out[36]: (2, 3, 4, 5, 6)
型或者使用expand_dims,它在盖子下面使用reshape。从ndim和所需的插入尺寸中获得(1,2)
expand_dims
reshape
ndim
In [37]: N1=np.expand_dims(N,(1,2)); N1.shape Out[37]: (4, 1, 1) In [38]: (M*N1).shape Out[38]: (2, 3, 4, 5, 6)
型
1条答案
按热度按时间xfyts7mz1#
我会说明几种方法
字符串
N
可以用None
展开;只需要尾随的;前导的是隐式的型
我们可以使用如下内容创建一个索引元组:
型
或者我们可以重新整形
N
,添加所需的尾随尺寸1维:型
或者使用
expand_dims
,它在盖子下面使用reshape
。从ndim
和所需的插入尺寸中获得(1,2)型