2016-10-27 8 views
2

私は一連のバイナリNumPy配列(特定の時間に曇った(1s)と透明な(0s)の空ピクセルを表します)をまとめて追加し、雲がある観測の総数を求めます各画素に存在する。NumPyアレイを変更/上書きする

クラウドのパーセンテージ(クラウド(1s)/トータルオブザベーション* 100)を探したいと思っていますが、元の変数を変更したいときにNumPy配列を使ってPythonでこれを動作させることはできません。これまで

マイ(簡体字)のコードは次のとおりです。

import numpy as np 

arr1 = np.array([1,0,1]) 
arr2 = np.array([0,0,1]) 

total1 = np.add(arr1, arr2) 
>>> [1 0 2] 

total2 = total1     #Purely to make multiple to elaborate my issue 

variables = [total1, total2] 

for x in variables: 
    x = x + 100 

total1 
>>> [1 0 2] 

あなたはtotal1変数が更新されていないことを基本的に見ることができます。それは次のように動作します:

for x in variables: 
    x += 100 

total1 
>>> [201, 200, 202] 

私はしかし、私は、パーセンテージを計算のようなものにしたい、100で値をインクリメントしたくない:

for x in variables: 
    x = x/1 * 100    #I have simplified the maths for ease of reading 

#This is my desired output - note how total1 is updated, not created 
total1 
>>> [100, 0, 200] 

が、これは動作しません。私は2つ以上の変数があり、n個の変数に対して実行するようにコードを自動化しようとしているので、変数にアクセスしています(変数名はtotal1>合計nです)。

+0

numpyとその配列を見てみましょう。これは完璧なユースケースです。 – Dschoni

+0

あなたのコメントが理解できませんか? NumPy配列を使用していますが、動作しません。詳しく教えてください。 –

+0

コードを明確にすることはできますか?問題は、深いコピーをしたいときに浅いコピーをしているということです。 https://docs.python.org/2/library/copy.html –

答えて

0

次のコードは、配列を作成し、それらを一緒に追加し、各要素を100で割ります。パーセンテージでは、エントリの数を知る必要があります。あなたは3-D配列で作業し、numpyの和/平均等の関数を使うことができます。

import numpy as np 
a = np.array([1,0,1]) 
b = np.array([0,0,1]) 
c = (a+b)/100 

あなたがarangeあなたの入力は、画像の3Dスタック(ちょうど野生の推測)をすることができれば、あなたのような何かを行うことができます。もちろん、この缶はに応じて大幅に簡素化すること

import numpy as np 

a = np.array([[1,0,1],[0,0,0],[0,0,1]]) 
b = np.array([[0,0,0,],[0,1,0],[1,1,1]]) 
c = np.empty((2,3,3)) 
c[0]=a 
c[1]=b 

d = (c.sum(axis=0)/c.shape[0])*100 

を入力。私はちょうどここに、各ステップを示すためにそれを置く。

+0

ありがとうございます - 私はこの方法を知っています、私は新しい変数 'c​​'を作成せずにすべてを行うことができるかどうか、毎回あなたのケースでは、私は思っていた。あなたはこれが可能かどうかについてのアイデアはありますか? –

+0

さて、出力をどうにかする必要があります。あなたがその場所でものをやりたいのであれば、ちょうどそれをcという名前にしないでください:)しかし – Dschoni

+0

助けてくれてありがとう - 私はあなたの例を理解していて、 'c'を 'a' 'a'ですが、私の質問に記載されている 'for variable in x'メソッドを使用してこれを行うと、私が説明した問題は解決しません。 'x'は更新されません - 意味があることを願っています。 –

0

あなただけの追加は、その場で作業したい場合:

for i in range(len(variables)): 
    variables[i]+=100 

は、トリックを行う必要があります。このようなことは非常に非効率的であることに注意してください。

+0

もう一度Dschoniに感謝しますが、元の質問をお読みください。変数を更新するための増分/減算を認識していますが(元の質問でこれを説明しました)、元の変数を上書きしてパーセンテージで観測数を置き換えたいとします。これは、+ =または - =(または類似の)メソッドを使用しては機能しません。 –

+0

これは変数[i]をあなたが望むように設定します。変数[i] = variables [i] * 2 + 1を実行できます。 – Dschoni

関連する問題