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

poe*_*ara 3 python arrays numpy

有没有更有效的方法(或至少pythonic)来堆叠n个副本的子阵列,以创建一个新的数组?

import numpy as np

x = np.arange(4)
for i in range(n-1):
    x = hstack((x,arange(4)))
Run Code Online (Sandbox Code Playgroud)

谢谢,

unu*_*tbu 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]])
Run Code Online (Sandbox Code Playgroud)

但要小心 - 你可以使用广播而不是一遍又一遍地重复同一行.

例如,假设您有一些形状数组(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]])
Run Code Online (Sandbox Code Playgroud)

这是你的x:

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

In [43]: x
Out[43]: array([0, 1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

您可以添加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]])
Run Code Online (Sandbox Code Playgroud)

比较结果

In [45]: np.tile(x,(3,1)) + y
Out[45]: 
array([[ 0,  2,  4,  6],
       [ 4,  6,  8, 10],
       [ 8, 10, 12, 14]])
Run Code Online (Sandbox Code Playgroud)

如您所见,没有必要tile x先.事实上,通过平铺x,您可以节省内存.