numpy meshgrid的动态形状

时间:2014-08-15 18:30:09

标签: python numpy

我正在尝试使用numpy meshgrid来生成一些数组。所以,我有一个nd数组。让我们称之为数据,它可以有任意形状,我正在尝试生成一些索引数组,如下所示:

shape = data.shape

x = np.meshgrid[1,x-1 for x in shape]

我知道语法看起来很疯狂,但有时我会在python中尝试类似这样的东西而且它有效!无论如何,有没有办法在python中做这个动态meshgrid?这回来时语法错误无效:

 x = np.meshgrid[1,x-1 for x in shape]
                        ^
 SyntaxError: invalid syntax

编辑:

我想基本上创建一个索引数组。例如,当索引始终以0

开头时,我可以执行以下操作
import numpy as np

array = np.random.rand(5, 5, 5)
shape = array.shape
indices = np.indices(x-1 for x in shape)

这将创建一个ndarray,其索引从我的输入数组的每个轴开始,从0到(n-1)。现在,我想让索引从1开始,但找不到一个好方法。

编辑:

例如,对形状为(4,5,6)的数组的调用可能类似于:

 x = np.meshgrid(np.arange(1,4), np.arange(1,5), np.arange(1, 6))

1 个答案:

答案 0 :(得分:8)

离开你的最后一个例子,你可以这样做:

x = np.meshgrid(*[np.arange(1, x) for x in shape])

您需要显式创建要传递给meshgrid的值的列表。如果您希望每个人从1开始,则需要在每个arange的调用中加1。你不能做[1, arange(x)]这样的事情并且让它"分发" 1到所有的电话。

然后*将列表扩展为单独的参数。 (有关信息,请参阅here。)