将数组从MATLAB转换为numpy

Dou*_*ubt 1 python arrays matlab numpy

我正在定义一个两个数组,两端都有一个.在MATLAB中,这可以通过以下方式实现

x = [1 2*ones(1,3) 1]
Run Code Online (Sandbox Code Playgroud)

然而,在Python中,numpy提供了一些完全不同的东西:

import numpy
numpy.array([[1],2*numpy.ones(3),[1]])
Run Code Online (Sandbox Code Playgroud)

在Python中执行此MATLAB命令的最有效方法是什么?

unu*_*tbu 7

In [33]: import numpy as np

In [34]: np.r_[1, 2*np.ones(3), 1]
Out[34]: array([ 1.,  2.,  2.,  2.,  1.])
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用hstack:

In [42]: np.hstack(([1], 2*np.ones(3), [1]))
Out[42]: array([ 1.,  2.,  2.,  2.,  1.])
Run Code Online (Sandbox Code Playgroud)
In [45]: %timeit np.r_[1, 2*np.ones(300), 1]
10000 loops, best of 3: 27.5 us per loop

In [46]: %timeit np.hstack(([1], 2*np.ones(300), [1]))
10000 loops, best of 3: 26.4 us per loop

In [48]: %timeit np.append([1],np.append(2*np.ones(300)[:],[1]))
10000 loops, best of 3: 28.2 us per loop
Run Code Online (Sandbox Code Playgroud)

感谢DSM指出从一开始就预先分配正确大小的数组,比使用r_hstack在较小的数组上追加快得多:

In [49]: %timeit a = 2*np.ones(300+2); a[0] = 1; a[-1] = 1
100000 loops, best of 3: 6.79 us per loop

In [50]: %timeit a = np.empty(300+2); a.fill(2); a[0] = 1; a[-1] = 1
1000000 loops, best of 3: 1.73 us per loop
Run Code Online (Sandbox Code Playgroud)