2017-04-11 53 views
0

我是編程新手,對於如何編寫自己的循環有點不確定。這是我想要的嗎?製作陣列的最佳方法

讓我們細分區間[0,1]nx0=0,...,xn−1=1

寫功能compute_discrete_u(epsilon, n)該返回兩個numpy的數組:

x_array包含n點 u_array包含在這些點處的u離散值的座標。

u(x)=sin(1x+ϵ) 

謝謝!

+1

歡迎來到StackOverflow。請標記您指的是哪種語言。你更可能以這種方式得到答案 –

+1

從「兩個numpy陣列」我推斷蟒蛇:) –

+1

作爲@AP。指出,你會得到更多的答案與更合適的標籤。如果包含更多詳細信息,表明您已花費一些時間和精力自行解決問題,那麼您也有可能獲得更多更好的答案。具體來說,你有什麼嘗試?結果是什麼?他們怎麼不是你預期的結果? –

回答

0

首先,你根本不需要for循環。你想使用numpy,所以你可以使用numpy構建的矢量化操作。

這裏是你是從字面上要求(最有可能你不應該怎麼解決你的問題)功能:

# Do NOT use this. 
import numpy as np 

def compute_discrete_u(epsilon, n): 
    x = np.linspace(0, 1, n) 
    return x, np.sin(x + expsilon) 

這是相當尷尬的API。從點,外觀設計上,你是在功能混合兩種責任:

  1. 產生特定x矢量
  2. 計算基於數學函數u載體。

您不應該爲了複雜性和可重用性的原因這樣做。如果你以後需要非統一的x會怎樣?

因此,這裏是你應該做的:

import numpy as np 

def compute_u(x, epsilon): 
    return np.sin(x + epsilon) 

x = np.linspace(0, 1, num=101) 
u = compute_u(x, epsilon=1e-3) 

這是比較容易理解的,因爲該功能僅僅是數學函數。另外,你可以計算你喜歡的任何x數組(或單個浮點數)。如果你不需要compute_u其他地方,你甚至可以完全放棄它,並寫入u = np.sin(x + epsilon)

+0

這非常有幫助,非常感謝! – Kate