2016-06-24 9 views
0

を翻訳:(zarray私のコードではPythonはこれはCコードであるCのSAXPY

def saxpy(a, x, y): 
    return np.array([a * xi + yi for xi, yi in zip(x, y)], np.float32) 
#... 
btemp = beta/beta_prev 
ptemp = saxpy(btemp, parray, zarray) 
parray[:] = ptemp 

、正常に動作するようですとparrayされています

btemp = (*beta)/(*beta_prev); 
for (k=0; k<xsize*ysize; k++) { 
    parray[k] = zarray[k] + btemp*parray[k]; 
} 

そして、私はPythonで次の操作を行っていますそれらがwhileループの中にあるために絶え間なく変化する)。

しかし、私はない:

btemp = beta/beta_prev 
parray = saxpy(btemp, parray, zarray) 

私のコードは、ループ内での時間のカップルを反復した後に失敗し、彼らは同じではありませんか?

+0

あなたは、これらはすべてのためのループで縛る方法を示しすることはできますか? –

+0

あなたはPython 2またはPython 3を使っていますか? 'beta'と' beta_prev'の種類は何ですか? – MikeCAT

+0

cはポインタを使用しているので、どのように初期化して修正しますか? – sabbahillel

答えて

2

parray[:] =parray =に変更しました。これは同等ではありません。前者はparrayの内容を要素単位で割り当てます。これは、parrayが割り当ての右側と同じでない場合は重要な違いです。

は2例を考えてみましょう:

>>> xs = [1, 2, 3, 4] 
>>> xs[:] = tuple(2 * x for x in xs) 
>>> xs 
[2, 4, 6, 8] 
>>> type(xs) 
<class 'list'> 

>>> xs = [1, 2, 3, 4] 
>>> xs = tuple(2 * x for x in xs) 
>>> xs 
(2, 4, 6, 8) 
>>> type(xs) 
<class 'tuple'> 
関連する問題