2017-09-29 16 views
-3

私はn個の値の配列を持っています。そして、それらのそれぞれにn個の異なる値をm回(前回の結果から減算するたびに)減算したいと思います。リストのPython反復減算

マトリックス全体を保存します。

私は、forループのネストされた2と試みたが、私はそれを行うには管理していなかったと私は厳密に関連する記事を見つけることができませんでした...

データ= https://www.dropbox.com/s/anhyqq9f7h75qee/trace1.dat?dl=0

values_to_subtract =(データ - K )/ M

K =一定値

例:

x = np.array([x1,x2,x3]) 

m = 3 

dx = (x-k)/m 

私は、独自の計算された量DXのxのすべての要素を減らしたいと、私はこの行列を得るためにそれを3回やりたい:

Target Result

どうもありがとう

+2

実際の配列と予想される最終結果を掲載してください。 – RomanPerekhrest

+0

質問を編集して小さな実例を示します。 –

答えて

0

このbroadcastingを使用するのはかなり簡単です。例えば

>>> import numpy as np 
>>> dx = np.array([[1], [2], [3]]) 
>>> dx 
array([[1], 
     [2], 
     [3]]) 
>>> dx * np.arange(4) 
array([[0, 1, 2, 3], 
     [0, 2, 4, 6], 
     [0, 3, 6, 9]]) 
>>> x = np.array([[10], [10], [10]]) 
>>> x - dx * np.arange(4) 
array([[10, 9, 8, 7], 
     [10, 8, 6, 4], 
     [10, 7, 4, 1]]) 

は何放送、一般的に、あなたの配列は互換性の形状である場合に、素敵な方法で、すべての軸に沿って操作を適用されません。

>>> dx * np.arange(4) 
array([[0, 1, 2, 3], 
     [0, 2, 4, 6], 
     [0, 3, 6, 9]]) 

numpyのはouter product、すなわち:

[1]     [0 1*1 2*1 3*1] 
[2] * [0 1 2 3] = [0 1*2 2*2 3*2] 
[3]     [0 1*3 2*3 3*3] 

を取っているし、これはあなたがxから減算したいすべての値を与える:この手順で行って。 x - dx * np.arange(4)をブロードキャストする列ベクトルxを受け取り、この最終的な操作は、あなたのLaTeXの式であるように、に等しい

[10 10 10 10]  [0 1*1 2*1 3*1] 
[10 10 10 10] - [0 1*2 2*2 3*2] 
[10 10 10 10]  [0 1*3 2*3 3*3] 

ように見えるように外積(各列の値をコピー)と同じ形状にそれをブロードキャストします:

[x1 x1-dx x1-2dx x1-3dx] 
[x2 x2-dx x2-2dx x2-3dx] 
[x3 x3-dx x3-2dx x3-3dx] 
+0

ありがとうAlexander ...しかし何らかの理由で私のコード(あなたのものと同じ)は動作しません。なぜなら、オペランドが異なる形で一緒に放送されることはないからです。それはうまくいかない外製品だと思います。私のデータ(私の 'x')がnp.loadtxtを使ってtxtファイルとしてロードされることを考えてみましょう。 – Giulia

+0

あなたのものはおそらく私と同じ形ではありません。私の 'x'はshape(3,1)です。君は? –

+0

もしnp.shapeで確認したら、(10136、) – Giulia