从一个数组中取得结果,为每个元素创建一个矩阵N * M,并将所有值设置为元素,而没有for循环

问题描述

我有一个像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))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...