scipyとimread()を使用してRGBとしてイメージをインポートしました。 "R"コンポーネントを切り離して、メモリ内の新しいオブジェクトにコピーしたいとします。以下のコードは動作します:スライス表記でメモリに新しいコピーが作成されない
import scipy as sp
import scipy.misc as misc
import matplotlib.pyplot as plt
%matplotlib inline
pic = misc.imread("ARBITRARY IMAGE.png");
r = pic[:,:,0].copy()
r[0,0] = 0
print(r[0,0])
print(pic[0,0,0])
出力を期待:
0
255
は、しかし、私は次のパスでそこに着いた、と彼らは動作しない理由を私は知らない。
r = pic[:,:,0]
r[0,0] = 0
print(r[0,0])
print(pic[0,0,0])
出力:
0
0
フェアENOうわー、私はhereから構文キューを取り出し、それは単一の層の代わりにb = a[:]
のようなスライスを使用することを伴います。どの程度:
r = pic[:]
r[0,0,0] = 0
print(r[0,0,0])
print(pic[0,0,0])
や余分なステップを追加する:
r = pic[:]
r= r[:,:,0]
r[0,0] = 0
print(r[0,0])
print(pic[0,0,0])
はまだ出力:
0
0
それが配列でないリストが、配列のためthis answerは、この構文を暗示します大丈夫です。基本的に、私の例でスライス表記法を使用すると、新しいオブジェクトがメモリ内に作成されないのはどうですか?私は何か他のものが欠けていると仮定し、私のグーグルでは構文がうまくいくはずです。助けてくれてありがとう!
変数 'pic'はおそらく通常の配列ではありませんが、コピーを作成しないオーバーロードされたスライス演算子を持つオブジェクトではなく、同じデータを参照するビューです。例えば。 numpyは、私が正しく覚えていれば、コピーの作成も好きではありません。 –