问题描述
我有一个像np.array([1,2,3])的numpy数组
不使用for循环,而仅使用numpy或pytorch方法,我想要一个尺寸为len(array)* N * M由矩阵N * M组成的矩阵,第一个矩阵由所有一个组成,第二个矩阵仅由两个组成值,仅第三个值乘以3。
出于距离
N = 4 M = 3
[[[1,1,1],[1,1]],[[2,2,2],[2,2]],[[3,3,3],[3,3]]]
我尝试了不同的方法来获得该矩阵,例如不压缩并重复,但是我找不到解决方案,有什么建议吗?
解决方法
您在这里:
ind
或不乘:
np.ones((len(a),M,N)) * a[:,None,None]
输出:
np.full((len(a),N),a[:,None])
注意,此处的形状以及预期输出中给出的形状为array([[[1.,1.,1.],[1.,1.]],[[2.,2.,2.],[2.,2.]],[[3.,3.,3.],[3.,3.]]])
,而不是len(a) * M * N
。如果需要,请在len(a) * N * M
中交换M,N
。
在PyTorch中,您可以使用expand
a_t = torch.from_numpy(a)
a_t[:,None].expand(len(a_t),N)
tensor([[[1,1,1],[1,1]],[[2,2,2],[2,2]],[[3,3,3],[3,3]]],dtype=torch.int32)
另一种方法是使用repeat
a_t[:,None].repeat(1,N)
类似于numpy tile
-np.tile(a[:,None],(1,N))