如何从1-D阵列创建2-D numpy数组?

时间:2017-03-20 21:25:53

标签: python numpy

我有一个numpy数组:

import numpy as np
A = np.array([1,2])

我想制作n - 二维numpy数组中两个元素的副本,例如

B=[[1,1,1,1],[2,2,2,2]] # 4 copies of each element of A into a separate array

我该怎么做?

3 个答案:

答案 0 :(得分:3)

使用np.repeat然后重塑 -

np.repeat(A,4).reshape(-1,4)

reshape(-1,4)基本上保留4列数,-1指定它根据要重新整形的数组的总大小计算行数。因此,对于给定样本,np.repeat(A,4).size8,它会将8/4 = 2指定为行数。因此,它将np.repeat(A,4)重新整形为2D形状(2,4)数组。

使用None/np.newaxisnp.repeat延长至A后使用2D -

np.repeat(A[:,None],4,axis=1)

或在扩展版本上使用np.tile -

np.tile(A[:,None],4)

答案 1 :(得分:1)

您可以将它与另一个包含1 s:

的数组相乘
>>> import numpy as np
>>> A=np.array([1,2])
>>> A[:, np.newaxis] * np.ones(4, int)
array([[1, 1, 1, 1],
       [2, 2, 2, 2]])

如果只读副本足够您需要,您也可以使用broadcast_to(非常非常快速的操作):

>>> np.broadcast_to(A[:, None], [A.shape[0], 4])
array([[1, 1, 1, 1],
       [2, 2, 2, 2]])

答案 2 :(得分:1)

你可以使用矩阵乘法和(正确形状的)1s数组,然后转置最终数组。

import numpy as np

A = np.array([1, 2])

n = 4
B = np.ones((n, 1))
out = (A*B).T

您也可以使用np.vstack,然后转置数组。

out = np.vstack((A,)*n).T