我试图在代码中消除这些丑陋的for循环,但在使用np.meshgrid()和np.flatten()时无法恢复相同的行为。下面是一个很小的例子来说明这个问题:
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维吗?
谢谢,
发布于 2022-09-20 00:13:15
mesh_tuple=np.meshgrid(*[a,b,c], indexing='ij')
出于不明显的原因,meshgrid
在生成索引时交换前两个数组。indexing='ij'
告诉它做你想做的事。
https://stackoverflow.com/questions/73780148
复制相似问题