使用numpy在没有循环的情况下在python中使用数组或向量填充数组

时间:2017-03-06 04:24:20

标签: python arrays numpy vectorization

我正在尝试找到一种用数行填充数组的方法。用一个例子来表达我想要的输出要容易得多。给定N×M矩阵的输入,array1,

array1 = np.array([[2, 3, 4],
[4, 8, 3],
[7, 6, 3]])

我想输出一个数组数组,其中每一行都是一个N x N,由相应行的值组成。输出将是

[[[2, 3, 4],
  [2, 3, 4],
  [2, 3, 4]],
 [[4, 8, 3],
  [4, 8, 3],
  [4, 8, 3]],
 [[7, 6, 3],
  [7, 6, 3],
  [7, 6, 3]]]

2 个答案:

答案 0 :(得分:1)

您可以将数组从2d重新整形为3d,然后沿所需的轴使用numpy.repeat()

np.repeat(array1[:, None, :], 3, axis=1)

#array([[[2, 3, 4],
#        [2, 3, 4],
#        [2, 3, 4]],

#       [[4, 8, 3],
#        [4, 8, 3],
#        [4, 8, 3]],

#       [[7, 6, 3],
#        [7, 6, 3],
#        [7, 6, 3]]])

或者等效地,您可以使用numpy.tile

np.tile(array1[:, None, :], (1,3,1))

答案 1 :(得分:1)

另一个有时有用的解决方案是以下

out = np.empty((3,3,3), dtype=array1.dtype)
out[...] = array1[:, None, :]