numpy - numpy中meshgrid的python 变量维数

  显示原文与译文双语对照的内容

我尝试创建一个具有n 维的meshgrid 。 用n 列向量调用meshgrid有比我使用的if子句更好的方法?

编辑:目标是在用户定义的( 2 -100 ) 中使用它,如果不需要写 100.

if子句中的第二行减少了网格,因此 column(n) <列( n+1 )

例如:


import numpy as np


dimension = 2


range = np.arange(0.2,2.4,0.1)


if dimension == 2:


 grid = np.array(np.meshgrid(range,range)).T.reshape(-1,dimension)


 grid = np.array(grid[[i for i in range(grid.shape[0]) if grid[i,0]<grid[i,1]]])


 elif dimension == 3:


 grid = np.array(np.meshgrid(range,range,range)).T.reshape(-1,dimension)


 grid = np.array(grid[[i for i in range(grid.shape[0]) if grid[i,0]<grid[i,1]]])


 grid = np.array(grid[[i for i in range(grid.shape[0]) if grid[i,1]<grid[i,2]]])



编辑:解决方案在下面发布:


dimension = 2


r = np.arange(0.2,2.4,0.1)


grid=np.array(np.meshgrid(*[r]*n)).T.reshape(-1,n)



for i in range(0,n-1):


 grid = np.array([g for g in grid if g[i]<g[i+1]])



时间: 原作者:

我还没有完全吸收你的方法和目标,但这里有部分简化


In [399]: r=np.arange(3) # simpler range for example


In [400]: grid=np.meshgrid(*[r]*2) # use `[r]*3` for 3d case


In [401]: grid=np.array(grid).T.reshape(-1,2)


In [402]: np.array([g for g in grid if g[0]<g[1]]) # simpler comprehensions


Out[402]: 


array([[0, 1],


 [0, 2],


 [1, 2]])



itertools.product 使 2列网格更容易:


In [403]: from itertools import product


In [404]: np.array([g for g in product(r,r) if g[0]<g[1]])


Out[404]: 


array([[0, 1],


 [0, 2],


 [1, 2]])



也就是说在过滤之前你的grid


In [407]: grid


Out[407]: 


array([[0, 0],


 [0, 1],


 [0, 2],


 [1, 0],


 [1, 1],


 [1, 2],


 [2, 0],


 [2, 1],


 [2, 2]])



还有 product


In [406]: list(product(r,r))


Out[406]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]



product 有一个 repeat 参数,使这更容易:


In [411]: list(product(r,repeat=2))


Out[411]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]



你仍然需要 if 子句来对dim=3应用 2步筛选。 我想可以反复写


for i in range(0,dimension-1):


 grid = [g for g in grid if g[i]<g[i+1]]



原作者:
...