替代都不是native
或節省重塑,轉置等
例如內部column_stack
其輸入轉換爲2D「列」的陣列。有效地是做
In [1171]: np.concatenate((np.array(u.real,ndmin=2).T,np.array(u.imag,ndmin=2).T),axis=1)
Out[1171]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
vstack
通過其輸入端通過atleast_2d(m)
,確保各自是1行二維數組。 np.dstack
使用atleast_3d(m)
。
一種新函數是np.stack
In [1174]: np.stack((u.real,u.imag),-1)
Out[1174]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
它使用None
索引以校正級聯尺寸;有效地:
np.concatenate((u.real[:,None],u.imag[:,None]),axis=1)
所有最終使用np.concatenate
;它和np.array
是唯一編譯的連接函數。
另一個技巧是使用view
In [1179]: u.view('(2,)float')
Out[1179]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
的復值被保存爲2間相鄰的浮動。因此,同一個databuffer可以被視爲純浮游物,或者將這個視圖看作浮游物的二維數組。與concatenate
函數不同,這裏沒有複製。
替代方案的另一個測試是詢問當u
是2d或更高時會發生什麼?
我只是檢查了一下:)它避免了醜陋的索引! –