如何将变量步长插入到Numpy mgrid中?

6

我正在尝试使用numpy.mgrid创建两个网格数组,但我希望可以插入一个变量作为步数。

如果没有可变步数,numpy.mgrid将按照以下代码的预期工作:

x, y = np.mgrid[0:1:3j, 0:2:5j]

但是,我希望得到像这样的内容,因为我无法在生成网格数组的代码行中明确地声明步骤编号(由于脚本中的其他进程可能会更改值):

num_x_steps = 3
num_y_steps = 5
x, y = np.mgrid[0:1:(num_x_steps)j, 0:2:(num_y_steps)j] #Try convert to complex

有没有一种方法可以返回与第一种方法等效的结果?

我尝试过使用括号和一些其他修改来运行我的三行代码,但是似乎没有什么作用。

注意:我尝试阅读这个主题,但我不确定那个主题是否适用于这个问题;我不太理解正在被问及的内容或者如何回答它。(另外,我尝试运行答案中的代码行,但它返回了MemoryError。)如果说该主题回答了我的问题,请有人解释一下它,并说明它如何适用于我的问题吗?


mgrid 中使用 3j 是一种符号技巧。在内部,它会检查切片步长是否为复数(数学上的虚数),并进行一些数学计算,将其视为计数而不是通常的 arange 步长。 - hpaulj
2个回答

10

问题在于括号后面的j不能转换为复数。

In [41]:(1)j
  File "<ipython-input-41-874f75f848c4>", line 1
    (1)j
       ^
  SyntaxError: invalid syntax

将一个值乘以 1j 将起到作用,这些行会给出等价于你的第一行的 x,y:

num_x_steps = 3
num_y_steps = 5
x, y = np.mgrid[0:1:(num_x_steps * 1j), 0:2:(num_y_steps * 1j)]

4
我认为你想要做的是将步数转换为复数。
num_x_steps = 3
x_steps = complex(str(num_x_steps) + "j")

num_y_steps = 5
y_steps = complex(str(num_y_steps) + "j")

x, y = np.mgrid[0:1:x_steps, 0:2:y_steps]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接