动态形状的numpy meshgrid
我正在尝试使用numpy的meshgrid功能来生成一些数组。我有一个多维数组,叫做data,它的形状可以是任意的。我想生成一些索引数组,具体如下:
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 个回答
10
根据你最后的例子,你可以这样做:
x = np.meshgrid(*[np.arange(1, x) for x in shape])
你需要明确地创建一个你想传递给 meshgrid
的值的列表。如果你希望每个值都从1开始,那么在每次调用 arange
时都要把1放进去。你不能像这样做 [1, arange(x)]
,让它自动把1分配到所有的调用中。
然后这里的 *
是用来把列表里的值展开成单独的参数。(想了解更多,可以查看这里。)