动态形状的numpy meshgrid

0 投票
1 回答
3542 浏览
提问于 2025-04-18 17:26

我正在尝试使用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分配到所有的调用中。

然后这里的 * 是用来把列表里的值展开成单独的参数。(想了解更多,可以查看这里。)

撰写回答