没有一个替代品是native 或保存重塑、转置等。
例如,column_stack 在内部将其输入转换为二维“列”数组。实际上它正在做
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 行 2d 数组。 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; it 和 np.array 是唯一编译的连接函数。
另一个技巧是使用view
In [1179]: u.view('(2,)float')
Out[1179]:
array([[ 1., 2.],
[ 2., 4.],
[ 3., 6.],
[ 4., 8.]])
复数值保存为 2 个相邻的浮点数。因此,可以将相同的数据缓冲区视为纯浮点数,或者将此视图视为浮点数的二维数组。与concatenate 函数相比,这里没有复制。
对备选方案的另一个测试是询问当u 为 2d 或更高时会发生什么?