【问题标题】:Selective reshaping of 3d array to 2d array将 3d 阵列选择性重塑为 2d 阵列
【发布时间】:2017-06-06 15:51:49
【问题描述】:

我正在使用 3d 向量数组,但无法正确整形。 我的尺寸对应数量如下:

0 = 向量 (3)

1 = 点 (4)

2 = 折线 (2)

所以这可以解释为 2 条折线,每条包含 4 个点,每个点都有一个向量。我想重塑为 (3, 8) 的二维矩阵。

原来的数组是:

poly_array = array([[[-0.707, 0.0],
                      [-0.371, 0.0],
                      [0.371, 0.0],
                      [0.707, 0.0]],
                     [[0.0, -0.707],
                      [0.0, 0.0],
                      [0.0, 0.707],
                      [0.0, 0.0]],
                     [[0.707, 0.707],
                      [0.928, 1.0],
                      [0.928, 0.707],
                      [0.707, 0.0]]])

所以如果我正在查看沿第一条折线的有序点,我会运行:

for i in range(4):
    print poly_array[:,i,0]

或者对于沿着第二条折线的有序点:

for i in range(4):
    print poly_array[:,i,1]

如果我这样重塑:

new_dim = shape(poly_array)[1] * shape(poly_array)[2]
new_array = poly_array.reshape(3, new_dim)

但这会将向量排序为从每条折线中取一个(即,pt0-polyline0、pt0-polyline1、pt1-polyline0、pt1-polyline1 等)

In: print new_array[:, 0]
Out: [-0.707  0.     0.707]

In: print new_array[:, 1]
Out: [ 0.    -0.707  0.707]

但我想要

In: print new_array[:, 1]
Out: [-0.371  0.     0.928]

如何重塑形状,使其在下一条折线之前循环遍历与给定折线的点(沿轴 1)对应的所有向量?

【问题讨论】:

    标签: arrays python-2.7 numpy reshape


    【解决方案1】:

    您需要使用 np.swapaxes 和重塑轴对轴进行一些排列 -

    poly_array.swapaxes(1,2).reshape(poly_array.shape[0],-1)
    

    示例运行 -

    In [127]: poly_array
    Out[127]: 
    array([[[-0.707,  0.   ],
            [-0.371,  0.   ],
            [ 0.371,  0.   ],
            [ 0.707,  0.   ]],
    
           [[ 0.   , -0.707],
            [ 0.   ,  0.   ],
            [ 0.   ,  0.707],
            [ 0.   ,  0.   ]],
    
           [[ 0.707,  0.707],
            [ 0.928,  1.   ],
            [ 0.928,  0.707],
            [ 0.707,  0.   ]]])
    
    In [142]: out
    Out[142]: 
    array([[-0.707, -0.371,  0.371,  0.707,  0.   ,  0.   ,  0.   ,  0.   ],
           [ 0.   ,  0.   ,  0.   ,  0.   , -0.707,  0.   ,  0.707,  0.   ],
           [ 0.707,  0.928,  0.928,  0.707,  0.707,  1.   ,  0.707,  0.   ]])
    
    In [143]: out[:,1]
    Out[143]: array([-0.371,  0.   ,  0.928])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多