python:创建一个范围的数组

时间:2013-09-25 13:16:39

标签: python arrays numpy

我正在查看this帖子,因为我想创建一个数组,其中每列为x向量arange d dxdx相对应import numpy as np L = 80.0 N = 2 ** np.arange(-4, 10, dtype = np.float64) dx = L / N }}, 分别。希望这是有道理的。

dx

使用原始代码,我正在查看一个dx,现在我有一个dx值数组。 当我只使用一个x = np.arange(-L / 2., L / 2. - dx, dx) 时,我按如下方式设置我的x向量:

x

但是,我需要dx for,但我不知道如何做到这一点。我看了一下我在开头提到的帖子,我认为这提供了一些见解。我似乎无法根据自己的需要量身定做 - 也许它甚至不是正确的方法。

也许我需要一个for i in len(dx): x[i] = np.arange(-L / 2., L / 2. - dx, dx) 循环?

for

然后我可能需要嵌套另一个dx循环来为每次迭代选择一个dx

我不确定什么是正确的方法或最有效率。


为了澄清这种混淆,在x = np.arange(-L / 2.0, L / 2.0 - dx, dx) k = np.hstack((np.arange(0, N / 2.0 - 1.0), np.arange(-N / 2.0, 0))).T * 2.0 * np.pi / L k1 = 1j * k k3 = (1j * k) ** 3 u = 2 * (2 / (np.exp(x + 20.0) + np.exp(-x - 20.0))) ** 2 udata = u tdata = 0.0 Integration here 的情况下,我进行了以下设置:

u
然后,我使用Runge Kutta 4积分运行伪谱方法,以确定非线性KdV方程的数值dx。我想在不同的1/dx值上运行代码,以便找到错误并绘制1/dx与错误,其中exp(-c * dx)是x轴上的错误。

我希望这有助于我想要完成的任务。


由于我想找到错误,我需要相同的步长吗?我知道错误将以c的形式绘制,其中exp(-c / dx)是一个任意常量。我知道这是因为伪谱方法的误差为1 / dx,但我将对{{1}}进行绘图。

1 个答案:

答案 0 :(得分:2)

我不确定你是怎么想处理@Joel提出的问题,因为现在看来,

x = np.arange(-L / 2., L / 2. - dx, dx)

对于不同的dx,将提供不同大小的数组,这些数组无法堆叠。您可以使用您建议的for循环创建此类数组的列表:

L = 10
dxs =  np.array([1,2,3])
xs = [ np.arange(-L/2, L/2, dx) for dx in dxs ]

然后,xs是:

[array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4]),
 array([-5, -3, -1,  1,  3]),
 array([-5, -2,  1,  4])]

注意:我从上限(-dx => L/2 - dx)中删除了L/2因为arange已经排除了最后一点,你可以请参阅,因为结果永远不会以L/2 5结尾。功能

如果你想在保持相同边界的同时增加步长,这是不可避免的。


如果您可以更改边界并希望步长增加,但保持相同数量的元素,那么我建议使用以下内容,这样可以增加边界。

x = np.arange(-L/2, L/2)
x
#array([-5, -4, -3, -2, -1,  0,  1,  2,  3,  4])

x * dxs[...,None]
#array([[ -5,  -4,  -3,  -2,  -1,   0,   1,   2,   3,   4],
#       [-10,  -8,  -6,  -4,  -2,   0,   2,   4,   6,   8],
#       [-15, -12,  -9,  -6,  -3,   0,   3,   6,   9,  12]])