2016-11-10 10 views
0

ベクトルを正規化する(単位ベクトルを見つける)関数を書く必要があります。ベクトルは、ベクトルの各成分をその大きさで除算することによって正規化することができます。forループを使用して新しいリストを作成しますか?

この関数の入力は、ベクトル、つまり3つの整数を含む1次元のリストになります。

コードは次のとおりです。物事のカップルがあります

def my_norml(my_list): 
    tot_sum = 0 
    for item in my_list: 
     tot_sum = tot_sum + item**2 
    magng = tot_sum**(1/2) 
    norml1 = my_list[0]/magng #here i want to use a for loop 
    norml2 = my_list[1]/magng 
    norml3 = my_list[2]/magng 
    return [norml1, norml2,norml3] 

答えて

0

あなたはここで行うことができます。

最初に、tot_sum = tot_sum + item**2tot_sum += item**2としてより簡潔に書くことができます。あなたの質問に答えるために、ループを使って、あなたが望むものを達成することができます:

ret_list = [] 
for i in my_list: 
    ret_list.append(i/magng) 
return ret_list 

これは最善の方法ではありません。 あなたが必要とするものを達成するために、理解度を利用する方が良い方法です。また、内蔵の機能sumではなく、手動for-loopでそれを実行するために必要とする、あなたのために合計することが可能です。

magngは簡単sumに理解を渡すことで、1行で計算することができます。理解を使用すると、** 2に各itemを上げ、その後すぐにsumリターンという合計を分割:

return [item/magng for item in my_list] 

作成します。もう一度理解を利用することによって、この後

magng = sum(item**2 for item in my_list) ** (1/2) 

は、あなたがあなたの新しいリストを作成することができますitemのうちで除した後にmy_listにあるリスト。

最後に、あなたの完全な関数は、2つのラインに減少させることができた(と1しかし、それは読みやすさを妨げるでしょう):

def my_norml(my_list): 
    magng = sum(item**2 for item in my_list) ** (1/2) 
    return [item/magng for item in my_list] 

これは、あなたが内包表記を学んできた、あまりにも後より簡潔かつ慣用とかなり直感的です。

関連する問題