我正在尝试使用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))
答案 0 :(得分:8)
离开你的最后一个例子,你可以这样做:
x = np.meshgrid(*[np.arange(1, x) for x in shape])
您需要显式创建要传递给meshgrid
的值的列表。如果您希望每个人从1开始,则需要在每个arange
的调用中加1。你不能做[1, arange(x)]
这样的事情并且让它"分发" 1到所有的电话。
然后*
将列表扩展为单独的参数。 (有关信息,请参阅here。)