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)
谢谢,
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,您可以节省内存.