Python迭代减去列表

时间:2017-09-29 10:32:36

标签: python list loops for-loop iteration

我有一个n个值的数组,我想为每个值减去n个不同的值m次(每次从前一个结果中减去)。

我想保存整个矩阵。

我尝试了两个嵌套for循环,但我没有设法做到这一点,我找不到任何严格相关的帖子......

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

values_to_subtract =(data-k)/ m

k =常数值

示例:

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

m = 3

dx = (x-k)/m

我想减少其自身计算量 dx 的x的每个元素,我想做3次以获得此矩阵:

Target Result

非常感谢

1 个答案:

答案 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]

等于你的LaTeX等式:

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