我想将numpy ix_例程返回的开放网格转换为坐标列表

例如,用于:

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


我想要的是:

([0, 1], [0, 3], [2, 1], [2, 3], [4, 1], [4, 3])


我敢肯定,我可以将其与一些迭代,解压缩和压缩一起进行破解,但是我敢肯定,必须有一种明智的方法来实现这一目标……

最佳答案

方法#1使用np.meshgrid,然后堆叠-

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




方法2或者,依次使用np.array()transposingreshaping-

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


对于在np.ix_中使用通用数组数的通用情况,这里是需要进行的修改-

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


样品运行-

两个数组的情况:

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]])


三个数组的情况:

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]])

07-24 09:52
查看更多