2017-10-30 6 views
0

これまでに詳細を調べる前に、私は同様の問題を探していましたが、そのほとんどは私のために働く解決策ではありません。ここで古い配列に影響を与えない新しい同一の配列を作成する

は私がしようとしたものです:

my_array = np.zeros([5,5]) 

for i in range(4): 
    temp = my_array[:] 
    temp +=1 

は、だから私はそれを変更することなく、my_arrayでの試行錯誤を行う必要があります。これは、いくつかの重要な点を持つ簡略版です。しかし、私はmy_arrayとtempの両方を変更しました。

これまでのところ、このWeb上のソリューションでは[:]または.copyが使用されていました。私は両方の方法を試みましたが、それでもmy_arrayに影響します。

ご協力いただきましてありがとうございます。

+0

[別にnumpyの配列からデータをコピーする方法]の可能な重複(https://stackoverflow.com/questions/6431973/how-to-copy-data-from -a-numpy-array-to-another) –

+0

'[:]'の使用はスライシングと呼ばれます。配列をスライスすると、元の配列表現のビューが得られます。その参照先のデータはスライスの前と同じです。そのため、他のものを変更することなく編集することはできません。 しかし、 'a.copy()'は常にあなたの配列のディープコピーを作成します。あなたはそれを編集せずに編集することができます。 forループの前に 'temp = my_array.copy()'を実行するだけです。 – Timo

答えて

0

copy作品:

my_array = np.zeros([5,5]) 

for i in range(4): 
    temp = my_array.copy() 
    temp +=1 

print(temp) 
#[[ 1. 1. 1. 1. 1.] 
# [ 1. 1. 1. 1. 1.] 
# [ 1. 1. 1. 1. 1.] 
# [ 1. 1. 1. 1. 1.] 
# [ 1. 1. 1. 1. 1.]] 

print(my_array) 
#[[ 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0.] 
# [ 0. 0. 0. 0. 0.]] 
+0

ああ!私は以前に間違って使ったと思う。ありがとう! – JKC

0

あなたは、この後に一時に加えた変更は、それを行う必要がありますmy_array

に反映されませんdeepcopy

import copy 

temp = copy.deepcopy(my_array) 

を実行する必要があります。

+0

こんにちは、すばらしい答えをありがとう!私はそれを試して、 "名前 'コピーが定義されていない" だから私はtemp.deepcopy(my_array)を試み、AttributeErrorを持っています:' numpy.ndarray 'オブジェクトに属性' deepcopy 'がありません – JKC

+0

temp = copy.deepcopy (my_arrayで) をtemp.deepcopy、あなたがコピー最初 –

+0

をインポートし、基本的に確認していない: はあなたのプログラムの先頭に次の行を追加します。 「インポートコピーを」引用符なしで明らかに その後、次のコード を使用して一時に配列をコピーします "temp = copy.deepcopy(my_array)" 行のインポートコピーでエラーが発生した場合は、システムにインストールしてください。 Anacondaパッケージをインストールすることをお勧めします –

関連する問題