2016-11-17 12 views
0

私のc-ファイル(5x4行列)に2つの配列g_T_npg_rho_npを掛け合わせたdouble sumがあります。しかし、私の最終結果は単なる数字ではなく、別の配列です。どこのループをdouble sumで配列に掛けるか

ここでは、私は2つの配列内のすべてのエントリが配列全体ではなく乗算されるように、別のforループをどこに含めることができるかを尋ねています。

g_T = [1,T,T**2,T*sy.log(T),T**2*sy.log(T)] 
g_rho = [1,rho,rho**2,rho*sy.log(rho),rho**2*sy.log(rho)] 

g_T_np = np.asarray(g_T) 
g_rho_np = np.asarray(g_rho) 

c = np.loadtxt("c_file2.txt") 

for n in range(5): 
    for m in range(4): 
     free = c[n,m]*g_T_np*g_rho_np 

f = open('Free_Energy_Values.txt', 'w') 
print >> f, 'Free energy:', free 
f.close() 

ありがとうございました。

編集:私はこの公式に従って自由エネルギーを計算したいと思います。

式は、外側の和が1〜4であることを、 enter image description here

C-ファイル enter image description here

+0

を明確でした、関数が返すために何を想定していますか?また、それぞれの反復にあると思われる「内部」は何ですか? – hlfrmn

+0

こんにちは@hlfrmn返信ありがとうございます。関数は1つの数値を返す必要があります。私のテストから残っているので、両方の「内部」が削除される可能性があります – Shaun

+0

この単一の数値は何であるべきですか?あなたは、サイズ1x5の2つのアレイと、サイズ5x4のアレイを持っています。あなたはこの機能で何をしようとしていますか? – hlfrmn

答えて

0

注意自由エネルギーを計算し、及び内側和は1から5です。数式をプログラミング言語に変換する最も簡単な方法は、最適化なしで同じことを置くことです。

ストレートフォワードな方法:あなたは

from math import log 
import numpy as np 


def F(T, rho): 
    g_T = np.array([1, T, T ** 2, T * log(T), T ** 2 * log(T)]) 
    g_rho = np.array([1, rho, rho ** 2, rho * log(rho), rho ** 2 * log(rho)]) 
    c = np.loadtxt("c_file2.txt") 
    total_sum = 0 
    for i in range(4): 
     for k in range(5): 
      # we are traversing columns, not rows: notice [k,i], not [i,k] 
      total_sum += c[k, i] * g_T[i] * g_rho[k] 
    return total_sum 


T = 1 # dummy value 
rho = 2 # dummy value 
print(F(T, rho)) 
+0

ありがとうございました!それは非常に素晴らしいと私はそれがどのように動作するか見ることができます:) – Shaun

関連する問題