Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 沿新轴的Numpy重复阵列_Python_Numpy_Multidimensional Array - Fatal编程技术网

Python 沿新轴的Numpy重复阵列

Python 沿新轴的Numpy重复阵列,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,最好/最有效的方法是什么 x是数组,n是我希望重复的次数: np.repeat(x[None,...], n, axis=0) 或 请注意,对于已知的数组大小,后者变得简单: np.tile(x, (n, 1, 1)) # x is 2D np.tile的部分代码是: for i, nrep in enumerate(tup): if nrep!=1: c = c.reshape(-1, n).repeat(nrep, 0) 换句话说,它会在每个轴上重复一次以上。

最好/最有效的方法是什么

x是数组,n是我希望重复的次数:

np.repeat(x[None,...], n, axis=0)

请注意,对于已知的数组大小,后者变得简单:

np.tile(x, (n, 1, 1))  # x is 2D

np.tile
的部分代码是:

for i, nrep in enumerate(tup):
    if nrep!=1:
        c = c.reshape(-1, n).repeat(nrep, 0)
换句话说,它会在每个轴上重复一次以上。实际上,它是对多个轴重复的概括

因此,我希望计时是类似的,尽管普通的
repeat
会有更少的Python开销<编译代码>重复。(一些简单的测试证实了这一点-
repeat
对于小型阵列要快2倍,对于大型阵列要稍微快一点)

p、
x[None,…]
步骤实际上是无成本的。由于广播的缘故,这可能就是你所需要的


p、 在美国,有一种更快的方法可以重复这个过程,使用
np.lib.index\u技巧。对于
(20,50)
形状
x

as_strided(x,shape=(n,20,50),strides=(0,200,4))
np.broadcast\u数组
也使用
作为跨步
。所以这产生了同样的结果:

np.broadcast_arrays(np.ones((n,1,1)),x)[1] 
但老实说,这只是对广播的阐述,不是真正的重复。数据还没有被复制。相同的值只使用了
n次

广播可用于填充整个阵列,但计时与
repeat
相同。这可能是
repeat
在发动机罩下正在做的事情

z = np.empty((300,20,50),dtype=int)
z[:] = x[None,...]

你试过。。。计时?通常情况下,您希望将此操作应用于最后一个轴,或者更好,这取决于您以后如何使用它,您可以利用numpy的广播功能,完全避免重复(这肯定会更快)。如果你给出一个更大的图景,我们可能会指出。
index\u tricks
是一个模块的可爱名称。谢谢一旦你完全进入它的思维模式,numpy真的很棒,可悲的是我还没有到那里。
z = np.empty((300,20,50),dtype=int)
z[:] = x[None,...]