我有一个形状为(5,2,1)的数组
array([[[-0.00047776],
[-0.00065181]],
[[-0.00065181],
[ 0.00130446]],
[[ 0.00130446],
[ 0.00151989]],
[[ 0.00151989],
[ 0.00121407]],
[[ 0.00121407],
[-0.00121259]]], dtype=float32)
我想将它转换为像这样的形状(2,5,1)
array([
[[-0.00047776], [-0.00065181], [ 0.00130446], [ 0.00151989], [ 0.00121407]],
[[-0.00065181], [ 0.00130446], [ 0.00151989], [ 0.00121407], [-0.00121259]]
])
由于
答案 0 :(得分:3)
每个NumPy数组的项目都有一个自然的1D顺序。这是顺序
你看到的时候
ravel
数组。重塑(使用默认顺序='C')不会更改顺序
数组中的项目。因此,x.reshape(shape)
与...相同
x.ravel().reshape(shape)
。这里的关键外卖消息是一个数组
当且仅当y
等于x
时,y.ravel()
才能通过重塑x.ravel()
来“到达”。
因此,考虑给定数组中项目的raveled(1维)顺序和所需数组:
In [21]: x = np.array([[[-0.00047776], [-0.00065181]], [[-0.00065181], [ 0.00130446]], [[ 0.00130446], [ 0.00151989]], [[ 0.00151989], [ 0.00121407]], [[ 0.00121407], [-0.00121259]]], dtype=np.float32); x.ravel()
Out[21]:
array([-0.00047776, -0.00065181, -0.00065181, 0.00130446, 0.00130446,
0.00151989, 0.00151989, 0.00121407, 0.00121407, -0.00121259], dtype=float32)
与
In [22]: y = np.array([ [[-0.00047776], [-0.00065181], [ 0.00130446], [ 0.00151989], [ 0.00121407]], [[-0.00065181], [ 0.00130446], [ 0.00151989], [ 0.00121407], [-0.00121259]] ]); y.ravel()
Out[22]:
array([-0.00047776, -0.00065181, 0.00130446, 0.00151989, 0.00121407,
-0.00065181, 0.00130446, 0.00151989, 0.00121407, -0.00121259])
请注意,商品订单不同。因此,要实现所需的数组,必须首先(以某种方式)重新排序x
中的项目。在这种情况下,交换第一轴和第二轴的using swapaxes
可以解决问题:
In [23]: x.swapaxes(0,1)
Out[25]:
array([[[-0.00047776],
[-0.00065181],
[ 0.00130446],
[ 0.00151989],
[ 0.00121407]],
[[-0.00065181],
[ 0.00130446],
[ 0.00151989],
[ 0.00121407],
[-0.00121259]]], dtype=float32)
In [26]: np.allclose(x.swapaxes(0,1), y)
Out[26]: True
由于x.swapaxes(0,1)
已经具有形状(2,5,1),因此不需要重新塑形。