2017-03-03 9 views
-1
y[:,2] = np.ravel(rkf78(neq,ti,(ti-step),(step/50),tetol,x1)) 

この行の前後にx1を印刷すると、結果が異なります。具体的には、この行の後x1の値はy[:,2]Numpyは配列の変更を制御できません

y[:,2] = np.ravel(rkf78(neq,ti,(ti-step),(step/50),tetol,(np.copy(x1)))) 

私はこの解決策を見つけたに等しいですが、配列の変更については、この事は私のトラブルの多くを引き起こしているようです。誰も私にこの問題についてのいい説明を提案してもらえますか?

+0

これらの式には未知の変数が多すぎます。しかし、私は 'rkf78'が' x1'の入力を変更していると推測しています。引数は参照によって関数に渡され、関数内の変更はその変数の外に表示されます。 – hpaulj

答えて

1

あなたのrkf78機能を見ずに、あなたのx1リストがどのように使われているのか分かりません。私はまた、x1がリストかnumpy配列であると仮定しています。

リストと配列についての事は、あなたが他と同じものを設定した場合ということです、つまり

x1があなたのリストであるあなたがしなかったことから、 dummy_listへの変更が x1に反映されます
dummy_list = x1 

独立したコピーは、古いものへの新しい参照を作成しただけです。そのため、おそらくnp.copy(x1)が働いています。新しいメモリIDを持つリストが作成され、このリストに対する変更はx1に反映されません。

別の解決策:

from copy import deepcopy 
dummy_list = deepcopy(x1) 

は、基本的に以前と同じことをしますが、また、リスト内のリストを占めています。しかし、これは配列では使用できません。

今後の参考として、問題に関連するコードの要素に関する情報を追加してください。

+0

'x1'が(リストのリストではなく)numpyの配列であれば' np.copy'で十分です。配列のための特別なdeepcopyメソッドはありません。 – hpaulj

+0

ありがとうhpaulj、私は私の答えを反映するように変更します –

関連する問題