为了账号安全,请及时绑定邮箱和手机立即绑定

来自数组的 Numpy,为每个元素创建一个矩阵 N*M,所有值都设置为没有 for 循环的元素

来自数组的 Numpy,为每个元素创建一个矩阵 N*M,所有值都设置为没有 for 循环的元素

互换的青春 2023-05-16 14:37:14
我有一个像 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,1,1,1],[1,1,1,1]],    [[2,2,2,2],[2,2,2,2],[2,2,2,2]],    [[3,3,3,3],[3,3,3,3],[3,3,3,3]]]我尝试了不同的方法来实现这个矩阵,比如 unsqueeze 和 repeat 但我找不到解决方案,有什么建议吗?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

干得好:

np.ones((len(a),M,N)) * a[:,None,None]

或者没有乘法:

np.full((len(a),M,N), a[:,None,None])

输出:

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

       [[2., 2., 2., 2.],
        [2., 2., 2., 2.],
        [2., 2., 2., 2.]],

       [[3., 3., 3., 3.],
        [3., 3., 3., 3.],
        [3., 3., 3., 3.]]])

请注意此处的形状和预期输出中给出的形状是len(a) * M * N,而不是len(a) * N * MM,N如果需要,可以交换np.ones


查看完整回答
反对 回复 2023-05-16
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

在 PyTorch 中你可以使用expand

a_t = torch.from_numpy(a)


a_t[:,None,None].expand(len(a_t), M, N)

tensor([[[1, 1, 1, 1],

         [1, 1, 1, 1],

         [1, 1, 1, 1]],


        [[2, 2, 2, 2],

         [2, 2, 2, 2],

         [2, 2, 2, 2]],


        [[3, 3, 3, 3],

         [3, 3, 3, 3],

         [3, 3, 3, 3]]], dtype=torch.int32)

另一种方法是使用repeat

a_t[:,None,None].repeat(1, M, N)

这类似于 numpy tilenp.tile(a[:,None,None], (1,M,N))


查看完整回答
反对 回复 2023-05-16
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信