首页 > 解决方案 > 来自数组的 Numpy,为每个元素创建一个矩阵 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,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 但我找不到解决方案,有什么建议吗?

标签: pythonarraysnumpymatrixpytorch

解决方案


干得好:

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,Nnp.ones需要就换。


推荐阅读