如何解决切片未知尺寸的网格
我正在尝试对经过训练的模型进行网格搜索。因此,生成网格,然后用模型预测该网格以找到最大值。 我用以下方法制作网格物体:
def generate_random_grid(n_scanning_parameters,n_points_each_dimension):
points=np.linspace(1,num=n_points_each_dimension,endpoint=False)
x_points=[points for dimension in range(n_scanning_parameters)]
mesh=np.array(np.meshgrid(*x_points))
return mesh
如您所见,我事先不知道尺寸。因此,稍后要索引网格以预测不同点时,我不知道如何索引。 例如,如果我有4个维度,且每个维度上有10个点,则网格的形状为(4,10,10)。我需要访问例如[:,0,0]或[:,1,2,3,4]。这会给我一个包含4个元素的一维矢量。 现在,我可以使用
生成最后4个索引 for index in np.ndindex(*mesh.shape[1:]):
,但是像mesh[:,index]
这样索引我的网格并不会像我期望的那样生成包含4个元素的一维矢量。
如何索引网格?
解决方法
由于您正在使用元组,并且numpy支持元组索引,所以我们从此开始。
实际上,您希望像a[:,0]
那样进行切片。但是您的索引是一个元组,并且您正在尝试类似a[:,(0,0)]
的方法-沿第二维为您提供了四个超平面。您的索引应该更像a[(:,0)]
-但这会产生语法错误。
因此解决方案是使用内置的slice
。
a[(slice(None),0)]
这将为您提供一维矢量。
就您的代码而言,您只需添加元组即可使其工作。
for index in np.ndindex(*mesh.shape[1:]):
vector = mesh[(slice(None),) + index]
另一种方法是简单地使用转置数组和反向索引。第一个维度在最后,不再需要:
。
for index in np.ndindex(*mesh.shape[1:]):
vector = mesh.T[index[::-1]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。