2017-09-29 67 views
-3

我有一個n值的數組,我想每次減去n次不同的值m次(每次從前面的結果中減去)。Python迭代列表減法

我想保存整個矩陣。

我試着用兩個嵌套的for循環,但我沒能做到這一點,我找不到任何職位嚴格相關...

數據= https://www.dropbox.com/s/anhyqq9f7h75qee/trace1.dat?dl=0

values_to_subtract =(數據 - K )/米

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並將其廣播到相同的形狀的外產物(在每一列中的值複製),使得該最終操作看起來像

[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

非常感謝亞歷山大......但由於某種原因,我的代碼(與您的代碼相同)不起作用,因爲它表示操作數無法與不同形狀一起廣播。我想,這是外部產品不起作用。考慮到我的數據(我的'x')是使用np.loadtxt作爲txt文件加載的...... – Giulia

+0

你的形狀可能與我的形狀不一樣。請注意,我的'x'是形狀(3,1)。你的是啥呢? –

+0

如果我用np.shape檢查它說(10136,) – Giulia