2013-09-25 19 views
2

我看this交因爲我想其中每列是一個x矢量arange d由dx與相應dx,創建一個數組分別。希望這是有道理的。蟒:形成陣列是人氣指數

import numpy as np 
L = 80.0 
N = 2 ** np.arange(-4, 10, dtype = np.float64) 
dx = L/N 

用我的原代碼,我是在看一個dx那裏我現在有dx值的數組。 當我只能用一個dx,我建立了我的X向量,如下所示:

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

但是,我需要爲每個dxx,但我不知道如何做到這一點。我看了一下我在開頭提到的那篇文章,我認爲它提供了一些見解。我似乎無法根據我的需求來調整它 - 也許這不是正確的方法。

也許我需要一個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 

我然後跑與龍格庫塔4集成到數值僞光譜法確定的u非線性KdV方程。我想在不同的dx值上運行代碼,以便我可以找到該錯誤並繪製1/dx1/dx在x軸上的錯誤。

我希望這可以幫助我試圖完成。


因爲我想找到錯誤,我需要相同的步長嗎?我知道錯誤將以exp(-c * dx)的形式繪製,其中c是一個任意常量。我知道這是因爲僞譜法有錯誤exp(-c/dx),但我將繪製1/dx

+1

我不知道如何回答你的問題,但安排/ arange故意不同的拼寫?我在文中看到了兩個,但是我對Python的編輯知之甚少(如果它甚至需要它的話) – Gray

+1

我不完全確定你在問什麼,你是否想要一個NxM數組,其中每列都是一個不同的'arange'? – bheklilr

+0

是的,我也不太明白這個問題。如果是@bheklilr建議的,那麼你可以使用廣播來做一些事情,比如'np.arange(-2,2)[...,None] + np.arange(3)[None,...]' – YXD

回答

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])] 

注::我從上限(L/2 - dx =>L/2 =>L/2)中刪除了-dx,因爲arange已排除最後一個點,您可以看到這一點,因爲結果永遠不會以L/25結束。

如果您希望在保持相同邊界的情況下增加步長,這是不可避免的。


如果你可以改變的邊界,並希望步長增加,但保持相同數量的元素,那麼我建議是這樣的下面,這使得邊界增加。

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]]) 
+0

由於我想查找錯誤,我是否需要相同的步長?我知道錯誤會以'exp(-c * dx)'的形式繪製,其中c是一個任意常量。我知道這是因爲僞譜法有'exp(-c/dx)'的錯誤,但是我將對'1/dx'進行繪圖。 – dustin

+0

我不確定我是否理解了您的應用程序,並且沒有足夠的幫助。聽起來'dx'是你的點的間距,但是你的問題的界限應該設定邊界('L'應該是固定的),所以你可能需要第一個解決方案。你不能把它變成一個數組,因爲每個'x'的點數都會不同,所以你原來的問題可能是沒有意義的,但這不應該是一個問題。只需解決它'爲X在xs'。 – askewchan