convert numpy open mesh to coordinates

前端 未结 1 1453
星月不相逢
星月不相逢 2021-01-14 14:17

I\'d like to turn an open mesh returned by the numpy ix_ routine to a list of coordinates

eg, for:

In[1]: m = np.ix_([0, 2, 4], [1, 3])
In[2]: m
Out[         


        
相关标签:
1条回答
  • 2021-01-14 15:15

    Approach #1 Use np.meshgrid and then stack -

    r,c = np.meshgrid(*m)
    out = np.column_stack((r.ravel('F'), c.ravel('F') ))
    

    Approach #2 Alternatively, with np.array() and then transposing, reshaping -

    np.array(np.meshgrid(*m)).T.reshape(-1,len(m))
    

    For a generic case with for generic number of arrays used within np.ix_, here are the modifications needed -

    p = np.r_[2:0:-1,3:len(m)+1,0]
    out = np.array(np.meshgrid(*m)).transpose(p).reshape(-1,len(m))
    

    Sample runs -

    Two arrays case :

    In [376]: m = np.ix_([0, 2, 4], [1, 3])
    
    In [377]: p = np.r_[2:0:-1,3:len(m)+1,0]
    
    In [378]: np.array(np.meshgrid(*m)).transpose(p).reshape(-1,len(m))
    Out[378]: 
    array([[0, 1],
           [0, 3],
           [2, 1],
           [2, 3],
           [4, 1],
           [4, 3]])
    

    Three arrays case :

    In [379]: m = np.ix_([0, 2, 4], [1, 3],[6,5,9])
    
    In [380]: p = np.r_[2:0:-1,3:len(m)+1,0]
    
    In [381]: np.array(np.meshgrid(*m)).transpose(p).reshape(-1,len(m))
    Out[381]: 
    array([[0, 1, 6],
           [0, 1, 5],
           [0, 1, 9],
           [0, 3, 6],
           [0, 3, 5],
           [0, 3, 9],
           [2, 1, 6],
           [2, 1, 5],
           [2, 1, 9],
           [2, 3, 6],
           [2, 3, 5],
           [2, 3, 9],
           [4, 1, 6],
           [4, 1, 5],
           [4, 1, 9],
           [4, 3, 6],
           [4, 3, 5],
           [4, 3, 9]])
    
    0 讨论(0)
提交回复
热议问题