Numpy ravel不会在三维中恢复网格()



我正试图在代码中消除这些丑陋的for循环,但在使用np.meshgrid((和np.platin((时无法恢复相同的行为

import numpy as np
a = np.arange(0,10)
b = np.arange(0,10)
c = np.arange(0,10)
mesh_tuple=np.meshgrid(*[a,b,c])
meshlist = []
for i in range(len(mesh_tuple)):
meshlist.append(mesh_tuple[i].flatten())
meshlist = np.asarray(meshlist)
list0, list1, list2 = [], [], []
for i0, p0 in enumerate(a):
for i1, p1 in enumerate(b):
for i2, p2 in enumerate(c):
list0.append(p0)
list1.append(p1)
list2.append(p2)
list0 = np.asarray(list0)
list1 = np.asarray(list1)
list2 = np.asarray(list2)
print(np.array_equal(list0, meshlist[0,:]))
print(np.array_equal(list1, meshlist[1,:]))
print(np.array_equal(list2, meshlist[2,:]))
print(np.array_equal(list0, meshlist[1,:]))
print(np.array_equal(list1, meshlist[0,:]))
print(np.array_equal(list2, meshlist[2,:]))

这个返回:

False
False
True
True
True
True

当然,我可以交换前两个指数,但这只能从3个方面解决问题。有人知道如何将其推广到N维吗?

谢谢你,

mesh_tuple=np.meshgrid(*[a,b,c], indexing='ij')

由于不明显的原因,meshgrid在生成索引时交换前两个数组。indexing='ij'告诉它按照你的意愿去做。

最新更新