如何从一维数组创建一个二维numpy数组?

4

我有一个numpy数组:

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

我希望能够复制一个2-D numpy数组中每个元素n次,例如:

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

我该如何做到呢?

3个回答

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) 重塑为形状为 (2,4)2D 数组。

或者在使用 np.repeat 之前,使用 None/np.newaxisA 扩展为 2D -

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

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

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

1
你可以将它与另一个包含1的数组相乘:
>>> 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]])

1
你可以使用矩阵乘法与一个形状正确的1数组,然后转置最终数组。
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接