Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从n个子数组副本创建一个数组_Python_Arrays_Numpy - Fatal编程技术网

在python中从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

是否有一种更有效的方法(或者至少是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, 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]])