在python中从n个子数组副本创建一个数组
是否有一种更有效的方法(或者至少是pythonic)来堆叠子阵列的n个副本以创建新阵列在python中从n个子数组副本创建一个数组,python,arrays,numpy,Python,Arrays,Numpy,是否有一种更有效的方法(或者至少是pythonic)来堆叠子阵列的n个副本以创建新阵列 import numpy as np x = np.arange(4) for i in range(n-1): x = hstack((x,arange(4))) 谢谢 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
import numpy as np
x = np.arange(4)
for i in range(n-1):
x = hstack((x,arange(4)))
谢谢
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]])
但是要小心--您可以使用,而不是重复同一行
例如,假设您有一些形状数组(3,4):
这是你的x
:
In [42]: x = np.arange(4)
In [43]: x
Out[43]: array([0, 1, 2, 3])
您可以使用y
(其形状为(3,4)
)添加x
(其形状为(3,4)
),NumPy将自动将x
广播到形状(3,4):
将结果与
In [45]: np.tile(x,(3,1)) + y
Out[45]:
array([[ 0, 2, 4, 6],
[ 4, 6, 8, 10],
[ 8, 10, 12, 14]])
如您所见,没有必要先将
平铺x
。事实上,通过不平铺x
,您可以节省内存。不要忘记高级索引和index\u技巧
模块实例<假设x
是平面阵列,则code>x[np.c.[[range(x.size)]*n]
将具有与平铺相同的效果。(尽管它可能仍然比直接广播占用更多内存。)非常简洁。np.tile()是我一直在寻找的,而广播解决方案是我来这里要求的。
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]])