我正在定義兩個數組,每個數組都有一個。在MATLAB中,這可以通過將數組從MATLAB轉換爲numpy
x = [1 2*ones(1,3) 1]
在Python中來達到的,但是,numpy的給人完全不同的東西:
import numpy
numpy.array([[1],2*numpy.ones(3),[1]])
什麼是Python中執行此MATLAB命令的最有效方法是什麼?
我正在定義兩個數組,每個數組都有一個。在MATLAB中,這可以通過將數組從MATLAB轉換爲numpy
x = [1 2*ones(1,3) 1]
在Python中來達到的,但是,numpy的給人完全不同的東西:
import numpy
numpy.array([[1],2*numpy.ones(3),[1]])
什麼是Python中執行此MATLAB命令的最有效方法是什麼?
In [33]: import numpy as np
In [34]: np.r_[1, 2*np.ones(3), 1]
Out[34]: array([ 1., 2., 2., 2., 1.])
或者,你可以使用hstack
:
In [42]: np.hstack(([1], 2*np.ones(3), [1]))
Out[42]: array([ 1., 2., 2., 2., 1.])
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
感謝帝斯曼指出,預分配從一開始就正確大小的數組,可以不是追加,在較小的陣列使用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
謝謝unutbu。未來,我應該如何努力尋找這樣的例程? – Doubt
應該注意的是'r_'可以比簡單地做'2 * ones(n + 2)'慢4倍,然後修補邊緣。這當然不會成爲一個問題,除非它在內部循環中。 – DSM
@DSM:你能否詳細說明一下?也許它取決於numpy的版本?我將'r_'與'hstack'進行了比較,並得到了大致相當的結果。 – unutbu