在python中从n个子数组副本创建一个数组

时间:2013-07-30 11:56:45

标签: python arrays numpy

是否有更高效的方法(或至少是pythonic)来堆叠子阵列的n个副本以创建新阵列?

import numpy as np

x = np.arange(4)
for i in range(n-1):
    x = hstack((x,arange(4)))

谢谢,

1 个答案:

答案 0 :(得分:5)

In [34]: x = np.arange(4)

In [35]: np.tile(x,(3,1))
Out[35]: 
array([[0, 1, 2, 3],
       [0, 1, 2, 3],
       [0, 1, 2, 3]])

但请注意 - 您可以使用broadcasting而不是一遍又一遍地复制同一行。

例如,假设您有一些形状数组(3,4):

In [40]: y = np.arange(12).reshape(3,4)

In [41]: y
Out[41]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

这是你的x

In [42]: x = np.arange(4)

In [43]: x
Out[43]: array([0, 1, 2, 3])

您可以添加x(形状为(4,)y(形状为(3,4)),NumPy会自动“广播”x塑造(3,4):

In [44]: x + y
Out[44]: 
array([[ 0,  2,  4,  6],
       [ 4,  6,  8, 10],
       [ 8, 10, 12, 14]])

将结果与

进行比较
In [45]: np.tile(x,(3,1)) + y
Out[45]: 
array([[ 0,  2,  4,  6],
       [ 4,  6,  8, 10],
       [ 8, 10, 12, 14]])

如您所见,首先不需要tile x。实际上,通过 not 平铺x,可以节省内存。